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);
+ }
+ }
}