diff --git a/src/GlobalSuppressions.cs b/src/GlobalSuppressions.cs index e44cc61..eb6aa26 100644 Binary files a/src/GlobalSuppressions.cs and b/src/GlobalSuppressions.cs differ diff --git a/src/NmeaParser.Shared/Nmea/Gnss/Gngst.cs b/src/NmeaParser.Shared/Nmea/Gnss/Gngst.cs new file mode 100644 index 0000000..c195448 --- /dev/null +++ b/src/NmeaParser.Shared/Nmea/Gnss/Gngst.cs @@ -0,0 +1,80 @@ +using System; + +namespace NmeaParser.Nmea.Gnss +{ + /// + /// Position error statistics + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Gngst")] + [NmeaMessageType("GNGST")] + public class Gngst : NmeaMessage + { + /// + /// Called when the message is being loaded. + /// + /// The NMEA message values. + protected override void OnLoadMessage(string[] message) + { + if (message == null || message.Length < 8) + throw new ArgumentException("Invalid GNGST", "message"); + FixTime = StringToTimeSpan(message[0]); + Rms = NmeaMessage.StringToDouble(message[1]); + SemiMajorError = NmeaMessage.StringToDouble(message[2]); + SemiMinorError = NmeaMessage.StringToDouble(message[3]); + ErrorOrientation = NmeaMessage.StringToDouble(message[4]); + SigmaLatitudeError = NmeaMessage.StringToDouble(message[5]); + SigmaLongitudeError = NmeaMessage.StringToDouble(message[6]); + SigmaHeightError = NmeaMessage.StringToDouble(message[7]); + } + + /// + /// UTC of position fix + /// + public TimeSpan FixTime { get; private set; } + + /// + /// RMS value of the pseudorange residuals; includes carrier phase residuals during periods of RTK (float) and RTK (fixed) processing + /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Rms")] + public double Rms { get; private set; } + + /// + /// Error ellipse semi-major axis 1 sigma error, in meters + /// + public double SemiMajorError { get; private set; } + + /// + /// Error ellipse semi-minor axis 1 sigma error, in meters + /// + public double SemiMinorError { get; private set; } + + /// + /// Error ellipse orientation, degrees from true north + /// + public double ErrorOrientation { get; private set; } + + /// + /// Latitude 1 sigma error, in meters + /// + /// + /// The error expressed as one standard deviation. + /// + public double SigmaLatitudeError { get; private set; } + + /// + /// Longitude 1 sigma error, in meters + /// + /// + /// The error expressed as one standard deviation. + /// + public double SigmaLongitudeError { get; private set; } + + /// + /// Height 1 sigma error, in meters + /// + /// + /// The error expressed as one standard deviation. + /// + public double SigmaHeightError { get; private set; } + } +} diff --git a/src/NmeaParser.Shared/NmeaParser.Shared.projitems b/src/NmeaParser.Shared/NmeaParser.Shared.projitems index 8cc777b..745fabb 100644 --- a/src/NmeaParser.Shared/NmeaParser.Shared.projitems +++ b/src/NmeaParser.Shared/NmeaParser.Shared.projitems @@ -13,6 +13,7 @@ + diff --git a/src/NmeaParser.Tests/NmeaMessages.cs b/src/NmeaParser.Tests/NmeaMessages.cs index 77ad5d7..19a188e 100644 --- a/src/NmeaParser.Tests/NmeaMessages.cs +++ b/src/NmeaParser.Tests/NmeaMessages.cs @@ -1,4 +1,4 @@ -// +// // Copyright (c) 2014 Morten Nielsen // // Licensed under the Microsoft Public License (Ms-PL) (the "License"); @@ -23,6 +23,7 @@ using NmeaParser.Nmea; using NmeaParser.Nmea.Gps; using System.Threading.Tasks; using System.IO; +using NmeaParser.Nmea.Gnss; namespace NmeaParser.Tests { @@ -374,5 +375,22 @@ namespace NmeaParser.Tests Assert.AreEqual(0.020, gst.SigmaLongitudeError); Assert.AreEqual(0.031, gst.SigmaHeightError); } - } + + [TestMethod] + public void TestGngst() + { + string input = "$GNGST,172814.0,0.006,0.023,0.020,273.6,0.023,0.020,0.031*74"; + var msg = NmeaMessage.Parse(input); + Assert.IsInstanceOfType(msg, typeof(Gngst)); + Gngst gst = (Gngst)msg; + Assert.AreEqual(new TimeSpan(17, 28, 14), gst.FixTime); + Assert.AreEqual(0.006, gst.Rms); + Assert.AreEqual(0.023, gst.SemiMajorError); + Assert.AreEqual(0.02, gst.SemiMinorError); + Assert.AreEqual(273.6, gst.ErrorOrientation); + Assert.AreEqual(0.023, gst.SigmaLatitudeError); + Assert.AreEqual(0.020, gst.SigmaLongitudeError); + Assert.AreEqual(0.031, gst.SigmaHeightError); + } + } }