private void ReadFromRawGPS(RawGPS rawGPS) { const uint HemisphereMask = 0x80000000; const uint CoordinateMask = 0x1FFFFFFF; const decimal CoordinatesDivisor = 1000000; const decimal DirectionDivisor = 100; const decimal SpeedDivisor = 100; Viled = (GpsReliability)rawGPS.viled; Expand = rawGPS.uexpand; Real = (DataType)rawGPS.ureal; Reserved = rawGPS.reserver; Latitude = new LatitudeType { Hemisphere = (LatitudeType.LatHemisphere)(rawGPS.ulatitude & HemisphereMask), Latitude = (rawGPS.ulatitude & CoordinateMask) / CoordinatesDivisor }; Longitude = new LongitudeType { Hemisphere = (LongitudeType.LonHemisphere)(rawGPS.ulatitude & HemisphereMask), Longitude = (rawGPS.ulongitude & CoordinateMask) / CoordinatesDivisor }; Speed = rawGPS.uspeed / SpeedDivisor; Height = rawGPS.uhigh; Direction = rawGPS.uhigh / DirectionDivisor; var dateString = Encoding.Default.GetString(rawGPS.utime).Trim('\0'); try { Time = DateTime.ParseExact(dateString, "yyyyMMddHHmmss", CultureInfo.InvariantCulture); } catch (FormatException) { Console.WriteLine("[ERROR]DATE FORMAT IS INAPPROPRIATE", ConsoleColor.Red); } }
public override void WriteJson(JsonWriter writer, object untypedValue, JsonSerializer serializer) { if (untypedValue == null) { serializer.Serialize(writer, null); return; } LatitudeType value = (LatitudeType)untypedValue; if (value == LatitudeType.Quantitative) { serializer.Serialize(writer, "quantitative"); return; } throw new Exception("Cannot marshal type LatitudeType"); }
/// <summary> /// 纬度转化为度(带单位) /// </summary> /// <param name="degree"></param> /// <param name="minute"></param> /// <param name="second"></param> /// <param name="latitudeType"></param> /// <returns></returns> public static double ToStandardRadian(double subDegree, double subMinute, double subSecond, LatitudeType latitudeType) { var totalDegree = subDegree + subMinute / _degreeToMiniute + subSecond / _degreeToSecond; var type = latitudeType == LatitudeType.N ? 1 : -1; return(type * totalDegree); }