using System; namespace GpsClient2.NmeaMessages { public class GpggaMessage : NmeaMessage { #region Description // $GPGGA,123519,4807.038,N,01131.000,E,1,08,0.9,545.4,M,46.9,M,,*47 // Where: // GGA Global Positioning System Fix Data // 123519 Fix taken at 12:35:19 UTC // 4807.038,N Latitude 48 deg 07.038' N // 01131.000,E Longitude 11 deg 31.000' E // 1 Fix quality: 0 = invalid // 1 = GPS fix(SPS) // 2 = DGPS fix // 3 = PPS fix // 4 = Real Time Kinematic // 5 = Float RTK // 6 = estimated(dead reckoning) (2.3 feature) // 7 = Manual input mode // 8 = Simulation mode // 08 Number of satellites being tracked // 0.9 Horizontal dilution of position // 545.4, M Altitude, Meters, above mean sea level // 46.9, M Height of geoid(mean sea level) above WGS84 // ellipsoid // (empty field) time in seconds since last DGPS update // (empty field) DGPS station ID number // *47 the checksum data, always begins with* #endregion #region Properties /// /// Fix taken /// public TimeSpan FixTime { get; set; } public double Latitude { get; set; } public double Longitude { get; set; } public GpsFixQuality FixQuality { get; set; } public int NumberOfSatellites { get; set; } /// /// Horizontal dilution of position /// public float Hdop { get; set; } /// /// Altitude, Meters, above mean sea level /// public float Altitude { get; set; } /// /// Altitude units ('M' for Meters) /// public string AltitudeUnits { get; set; } /// /// Height of geoid (mean sea level) above WGS84 /// public float HeightOfGeoId { get; set; } public string HeightOfGeoIdUnits { get; set; } /// /// Time in seconds since last DGPS update /// public int TimeSpanSinceDgpsUpdate { get; set; } /// /// DGPS station ID number /// public int? DgpsStationId { get; set; } #endregion #region Message parsing public override void Parse(string[] messageParts) { if (messageParts == null || messageParts.Length < 14) { throw new ArgumentException("Invalid GPGGA message"); } FixTime = messageParts[1].ToTimeSpan(); Latitude = messageParts[2].ToCoordinates(messageParts[3], CoordinateType.Latitude); Longitude = messageParts[4].ToCoordinates(messageParts[5], CoordinateType.Longitude); FixQuality = (GpsFixQuality)Enum.Parse(typeof(GpsFixQuality), messageParts[6]); NumberOfSatellites = messageParts[7].ToInteger(); Hdop = messageParts[8].ToFloat(); Altitude = messageParts[9].ToFloat(); AltitudeUnits = messageParts[10]; HeightOfGeoId = messageParts[11].ToFloat(); HeightOfGeoIdUnits = messageParts[12]; TimeSpanSinceDgpsUpdate = messageParts[13].ToInteger(); DgpsStationId = messageParts[14].ToInteger(); } #endregion public override string ToString() { return $"Latitude {Latitude} - Longitude {Longitude} - Hoogte {Altitude}"; } } }