mirror of
https://github.com/dotMorten/NmeaParser.git
synced 2025-12-06 07:12:04 +01:00
v1.9.0. Added more message types and tests.
This commit is contained in:
parent
7926e0c8e0
commit
b9d94a2f8c
|
|
@ -7,12 +7,15 @@ It makes it easy to connect and listen for NMEA messages coming from various dev
|
|||
The following inputs are supported:
|
||||
- System.IO.Stream (all platforms)
|
||||
- Emulation from NMEA log file (all platforms)
|
||||
- Bluetooth: Windows Store, Windows Phone, Windows Universal. Desktop is supported using the bluetooth device via the SerialPortDevice.
|
||||
- Bluetooth: Windows Universal. Desktop is supported using the bluetooth device via the SerialPortDevice.
|
||||
- Serial Device: Windows Desktop and Windows Universal.
|
||||
|
||||
|
||||
Currently supported NMEA messages:
|
||||
- Generic GPS NMEA (GPRMC, GPGGA, GPGLL, GPGSA, GPGSCV, GPRMB, GPRMC, GPBOD, GPRTE, GPGST)
|
||||
- GPS: GPBOD, GPGGA, GPGLL, GPGNS, GPGSA, GPGST, GPGSV, GPRMB, GPRMC, GPRTE
|
||||
- GLONASS: GLGNS, GLGSV
|
||||
- GALILEO: GAGSV
|
||||
- Generic GNSS: GNGGA, GNGLL, GNGNS, GNGSA, GNGST, GNRMC
|
||||
- Garmin GPS NMEA (PGRME, PGRMZ)
|
||||
- Trimble Laser Range Finder (PTNLA, PTNLB)
|
||||
- TruePulse Laser Range Finder (PLTIT)
|
||||
|
|
|
|||
|
|
@ -1,13 +1,16 @@
|
|||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio 15
|
||||
VisualStudioVersion = 15.0.27130.2010
|
||||
VisualStudioVersion = 15.0.27130.2003
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "NmeaParser", "NmeaParser", "{1701F3BA-A09C-4706-A612-24FD9340FC18}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{CF767486-305D-40EE-8845-58EF76C16D85}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SampleApp.WinDesktop", "SampleApp.WinDesktop\SampleApp.WinDesktop.csproj", "{5DB6C7C7-A19C-4BE3-AFE6-26E3061DA01F}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{1ADC3666-1DDB-48C4-9811-1E58B6D09A7C} = {1ADC3666-1DDB-48C4-9811-1E58B6D09A7C}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Desktop", "Desktop", "{7ABA337E-6748-484E-A0F4-E1715E1C95F1}"
|
||||
EndProject
|
||||
|
|
@ -31,8 +34,14 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NmeaParser.Tests.UWP", "Uni
|
|||
EndProject
|
||||
Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "NmeaParser.Tests", "UnitTests\NmeaParser.Tests\NmeaParser.Tests.shproj", "{979AE182-EB59-4181-9D45-3FD6E4817F11}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NmeaParser.Tests.NET45", "UnitTests\NmeaParser.Tests.NET45\NmeaParser.Tests.NET45.csproj", "{170EE734-37F0-425F-822B-B865348ECEC6}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{1ADC3666-1DDB-48C4-9811-1E58B6D09A7C} = {1ADC3666-1DDB-48C4-9811-1E58B6D09A7C}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SharedMSBuildProjectFiles) = preSolution
|
||||
UnitTests\NmeaParser.Tests\NmeaParser.Tests.projitems*{170ee734-37f0-425f-822b-b865348ecec6}*SharedItemsImports = 4
|
||||
UnitTests\NmeaParser.Tests\NmeaParser.Tests.projitems*{92cad93b-6c3b-45a0-a723-be046de50fec}*SharedItemsImports = 4
|
||||
UnitTests\NmeaParser.Tests\NmeaParser.Tests.projitems*{979ae182-eb59-4181-9d45-3fd6e4817f11}*SharedItemsImports = 13
|
||||
EndGlobalSection
|
||||
|
|
@ -125,6 +134,22 @@ Global
|
|||
{92CAD93B-6C3B-45A0-A723-BE046DE50FEC}.Release|x86.ActiveCfg = Release|x86
|
||||
{92CAD93B-6C3B-45A0-A723-BE046DE50FEC}.Release|x86.Build.0 = Release|x86
|
||||
{92CAD93B-6C3B-45A0-A723-BE046DE50FEC}.Release|x86.Deploy.0 = Release|x86
|
||||
{170EE734-37F0-425F-822B-B865348ECEC6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{170EE734-37F0-425F-822B-B865348ECEC6}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{170EE734-37F0-425F-822B-B865348ECEC6}.Debug|ARM.ActiveCfg = Debug|Any CPU
|
||||
{170EE734-37F0-425F-822B-B865348ECEC6}.Debug|ARM.Build.0 = Debug|Any CPU
|
||||
{170EE734-37F0-425F-822B-B865348ECEC6}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{170EE734-37F0-425F-822B-B865348ECEC6}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{170EE734-37F0-425F-822B-B865348ECEC6}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{170EE734-37F0-425F-822B-B865348ECEC6}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{170EE734-37F0-425F-822B-B865348ECEC6}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{170EE734-37F0-425F-822B-B865348ECEC6}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{170EE734-37F0-425F-822B-B865348ECEC6}.Release|ARM.ActiveCfg = Release|Any CPU
|
||||
{170EE734-37F0-425F-822B-B865348ECEC6}.Release|ARM.Build.0 = Release|Any CPU
|
||||
{170EE734-37F0-425F-822B-B865348ECEC6}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{170EE734-37F0-425F-822B-B865348ECEC6}.Release|x64.Build.0 = Release|Any CPU
|
||||
{170EE734-37F0-425F-822B-B865348ECEC6}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{170EE734-37F0-425F-822B-B865348ECEC6}.Release|x86.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
|
|
@ -138,6 +163,7 @@ Global
|
|||
{1ADC3666-1DDB-48C4-9811-1E58B6D09A7C} = {1701F3BA-A09C-4706-A612-24FD9340FC18}
|
||||
{92CAD93B-6C3B-45A0-A723-BE046DE50FEC} = {28B8E327-C504-4E08-B2CE-09D1CBB8B904}
|
||||
{979AE182-EB59-4181-9D45-3FD6E4817F11} = {28B8E327-C504-4E08-B2CE-09D1CBB8B904}
|
||||
{170EE734-37F0-425F-822B-B865348ECEC6} = {28B8E327-C504-4E08-B2CE-09D1CBB8B904}
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {03788B53-C0BF-485B-AA19-A9EAB0E9AF7B}
|
||||
|
|
|
|||
35
src/NmeaParser/Nmea/Galileo/Gagsv.cs
Normal file
35
src/NmeaParser/Nmea/Galileo/Gagsv.cs
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
//
|
||||
// Copyright (c) 2014 Morten Nielsen
|
||||
//
|
||||
// Licensed under the Microsoft Public License (Ms-PL) (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://opensource.org/licenses/Ms-PL.html
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
//
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace NmeaParser.Nmea.Galileo
|
||||
{
|
||||
/// <summary>
|
||||
/// GALILEO Satellites in view
|
||||
/// </summary>
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Gagsv")]
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1710:IdentifiersShouldHaveCorrectSuffix")]
|
||||
[NmeaMessageType("GAGSV")]
|
||||
public sealed class Gagsv : Gsv
|
||||
{
|
||||
}
|
||||
}
|
||||
73
src/NmeaParser/Nmea/Gll.cs
Normal file
73
src/NmeaParser/Nmea/Gll.cs
Normal file
|
|
@ -0,0 +1,73 @@
|
|||
//
|
||||
// Copyright (c) 2014 Morten Nielsen
|
||||
//
|
||||
// Licensed under the Microsoft Public License (Ms-PL) (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://opensource.org/licenses/Ms-PL.html
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
//
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace NmeaParser.Nmea
|
||||
{
|
||||
/// <summary>
|
||||
/// Geographic position, latitude / longitude
|
||||
/// </summary>
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Gll")]
|
||||
public abstract class Gll : NmeaMessage
|
||||
{
|
||||
/// <summary>
|
||||
/// Called when the message is being loaded.
|
||||
/// </summary>
|
||||
/// <param name="message">The NMEA message values.</param>
|
||||
protected override void OnLoadMessage(string[] message)
|
||||
{
|
||||
if (message == null || message.Length < 4)
|
||||
throw new ArgumentException("Invalid GPGLL", "message");
|
||||
Latitude = NmeaMessage.StringToLatitude(message[0], message[1]);
|
||||
Longitude = NmeaMessage.StringToLongitude(message[2], message[3]);
|
||||
if (message.Length >= 5) //Some older GPS doesn't broadcast fix time
|
||||
{
|
||||
FixTime = StringToTimeSpan(message[4]);
|
||||
}
|
||||
DataActive = (message.Length < 6 || message[5] == "A");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Latitude
|
||||
/// </summary>
|
||||
public double Latitude { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Longitude
|
||||
/// </summary>
|
||||
public double Longitude { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Time since last DGPS update
|
||||
/// </summary>
|
||||
public TimeSpan FixTime { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets a value indicating whether data is active.
|
||||
/// </summary>
|
||||
/// <value>
|
||||
/// <c>true</c> if data is active; otherwise, <c>false</c>.
|
||||
/// </value>
|
||||
public bool DataActive { get; private set; }
|
||||
|
||||
}
|
||||
}
|
||||
15
src/NmeaParser/Nmea/Glonass/Glgns.cs
Normal file
15
src/NmeaParser/Nmea/Glonass/Glgns.cs
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace NmeaParser.Nmea.Glonass
|
||||
{
|
||||
/// <summary>
|
||||
/// Fix data for GLONASS satellite navigation systems
|
||||
/// </summary>
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Glgns")]
|
||||
[NmeaMessageType("GLGNS")]
|
||||
public class Glgns : Gns
|
||||
{
|
||||
}
|
||||
}
|
||||
35
src/NmeaParser/Nmea/Glonass/Glgsv.cs
Normal file
35
src/NmeaParser/Nmea/Glonass/Glgsv.cs
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
//
|
||||
// Copyright (c) 2014 Morten Nielsen
|
||||
//
|
||||
// Licensed under the Microsoft Public License (Ms-PL) (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://opensource.org/licenses/Ms-PL.html
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
//
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace NmeaParser.Nmea.Glonass
|
||||
{
|
||||
/// <summary>
|
||||
/// GLONASS Satellites in view
|
||||
/// </summary>
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Glgsv")]
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1710:IdentifiersShouldHaveCorrectSuffix")]
|
||||
[NmeaMessageType("GLGSV")]
|
||||
public sealed class Glgsv : Gsv
|
||||
{
|
||||
}
|
||||
}
|
||||
241
src/NmeaParser/Nmea/Gns.cs
Normal file
241
src/NmeaParser/Nmea/Gns.cs
Normal file
|
|
@ -0,0 +1,241 @@
|
|||
//
|
||||
// Copyright (c) 2014 Morten Nielsen
|
||||
//
|
||||
// Licensed under the Microsoft Public License (Ms-PL) (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://opensource.org/licenses/Ms-PL.html
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
//
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace NmeaParser.Nmea
|
||||
{
|
||||
/// <summary>
|
||||
/// Fixes data for single or combined (GPS, GLONASS, possible future satellite systems, and systems combining these) satellite navigation systems
|
||||
/// </summary>
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Gns")]
|
||||
public abstract class Gns : NmeaMessage
|
||||
{
|
||||
/*
|
||||
* Example of GNS messages:
|
||||
* $GNGNS,014035.00,4332.69262,S,17235.48549,E,RR,13,0.9,25.63,11.24,,*70 //GLONASS
|
||||
* $GPGNS,014035.00,,,,,,8,,,,1.0,23*76 //GPS
|
||||
* $GLGNS,014035.00,,,,,,5,,,,1.0,23*67 //GALILEO
|
||||
*/
|
||||
|
||||
/// <summary>
|
||||
/// GNS Mode Indicator
|
||||
/// </summary>
|
||||
public enum Mode
|
||||
{
|
||||
/// <summary>
|
||||
/// No fix. Satellite system not used in position fix, or fix not valid
|
||||
/// </summary>
|
||||
NoFix,
|
||||
/// <summary>
|
||||
/// Autonomous. Satellite system used in non-differential mode in position fix
|
||||
/// </summary>
|
||||
Autonomous,
|
||||
/// <summary>
|
||||
/// Differential (including all OmniSTAR services). Satellite system used in differential mode in position fix
|
||||
/// </summary>
|
||||
Differential,
|
||||
/// <summary>
|
||||
/// Precise. Satellite system used in precision mode. Precision mode is defined as no deliberate degradation (such as Selective Availability) and higher resolution code (P-code) is used to compute position fix.
|
||||
/// </summary>
|
||||
Precise,
|
||||
/// <summary>
|
||||
/// Real Time Kinematic. Satellite system used in RTK mode with fixed integers
|
||||
/// </summary>
|
||||
RealTimeKinematic,
|
||||
/// <summary>
|
||||
/// Float RTK. Satellite system used in real time kinematic mode with floating integers
|
||||
/// </summary>
|
||||
FloatRtk,
|
||||
/// <summary>
|
||||
/// Estimated (dead reckoning) mode
|
||||
/// </summary>
|
||||
Estimated,
|
||||
/// <summary>
|
||||
/// Manual input mode
|
||||
/// </summary>
|
||||
Manual,
|
||||
/// <summary>
|
||||
/// Simulator mode
|
||||
/// </summary>
|
||||
Simulator
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Navigational status
|
||||
/// </summary>
|
||||
public enum NavigationalStatus
|
||||
{
|
||||
/// <summary>
|
||||
/// Not valid for navigation
|
||||
/// </summary>
|
||||
NotValid,
|
||||
/// <summary>
|
||||
/// Safe
|
||||
/// </summary>
|
||||
Safe,
|
||||
/// <summary>
|
||||
/// Caution
|
||||
/// </summary>
|
||||
Caution,
|
||||
/// <summary>
|
||||
/// Unsafe
|
||||
/// </summary>
|
||||
Unsafe
|
||||
}
|
||||
|
||||
private static Mode ParseModeIndicator(char c)
|
||||
{
|
||||
switch (c)
|
||||
{
|
||||
case 'A': return Mode.Autonomous;
|
||||
case 'D': return Mode.Differential;
|
||||
case 'P': return Mode.Precise;
|
||||
case 'R': return Mode.RealTimeKinematic;
|
||||
case 'F': return Mode.FloatRtk;
|
||||
case 'E': return Mode.Estimated;
|
||||
case 'M': return Mode.Manual;
|
||||
case 'S': return Mode.Simulator;
|
||||
case 'N':
|
||||
default: return Mode.NoFix;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Called when the message is being loaded.
|
||||
/// </summary>
|
||||
/// <param name="message">The NMEA message values.</param>
|
||||
protected override void OnLoadMessage(string[] message)
|
||||
{
|
||||
if (message == null || message.Length < 12)
|
||||
throw new ArgumentException("Invalid GNS", "message");
|
||||
FixTime = StringToTimeSpan(message[0]);
|
||||
Latitude = NmeaMessage.StringToLatitude(message[1], message[2]);
|
||||
Longitude = NmeaMessage.StringToLongitude(message[3], message[4]);
|
||||
if (message[5].Length > 0)
|
||||
GpsModeIndicator = ParseModeIndicator(message[5][0]);
|
||||
if (message[5].Length > 1)
|
||||
GlonassModeIndicator = ParseModeIndicator(message[5][1]);
|
||||
if (message[5].Length > 2)
|
||||
{
|
||||
FutureModeIndicator = message[5].Skip(2).Select(t => ParseModeIndicator(t)).ToArray();
|
||||
}
|
||||
else
|
||||
FutureModeIndicator = new Mode[] { };
|
||||
NumberOfSatellites = int.Parse(message[6], CultureInfo.InvariantCulture);
|
||||
Hdop = NmeaMessage.StringToDouble(message[7]);
|
||||
OrhometricHeight = NmeaMessage.StringToDouble(message[8]);
|
||||
GeoidalSeparation = NmeaMessage.StringToDouble(message[9]);
|
||||
var timeInSeconds = StringToDouble(message[10]);
|
||||
if (!double.IsNaN(timeInSeconds))
|
||||
TimeSinceLastDgpsUpdate = TimeSpan.FromSeconds(timeInSeconds);
|
||||
else
|
||||
TimeSinceLastDgpsUpdate = TimeSpan.MaxValue;
|
||||
if (message[11].Length > 0)
|
||||
DgpsStationId = message[11];
|
||||
|
||||
if (message.Length > 12)
|
||||
{
|
||||
switch (message[12])
|
||||
{
|
||||
case "S": Status = NavigationalStatus.Safe; break;
|
||||
case "C": Status = NavigationalStatus.Caution; break;
|
||||
case "U": Status = NavigationalStatus.Unsafe; break;
|
||||
case "V":
|
||||
default: Status = NavigationalStatus.NotValid; break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Time of day fix was taken
|
||||
/// </summary>
|
||||
public TimeSpan FixTime { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Latitude
|
||||
/// </summary>
|
||||
public double Latitude { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Longitude
|
||||
/// </summary>
|
||||
public double Longitude { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Mode indicator for GPS
|
||||
/// </summary>
|
||||
/// <seealso cref="GlonassModeIndicator"/>
|
||||
/// <see cref="FutureModeIndicator"/>
|
||||
public Mode GpsModeIndicator { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Mode indicator for GLONASS
|
||||
/// </summary>
|
||||
/// <seealso cref="GpsModeIndicator"/>
|
||||
/// <see cref="FutureModeIndicator"/>
|
||||
public Mode GlonassModeIndicator { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Mode indicator for future constallations
|
||||
/// </summary>
|
||||
/// <seealso cref="GlonassModeIndicator"/>
|
||||
/// <seealso cref="GpsModeIndicator"/>
|
||||
public Mode[] FutureModeIndicator { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Number of satellites (SVs) in use
|
||||
/// </summary>
|
||||
public int NumberOfSatellites { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Horizontal Dilution of Precision (HDOP), calculated using all the satellites (GPS, GLONASS, and any future satellites) used in computing the solution reported in each GNS sentence.
|
||||
/// </summary>
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Hdop")]
|
||||
public double Hdop { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Orthometric height in meters (MSL reference)
|
||||
/// </summary>
|
||||
public double OrhometricHeight { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Geoidal separation in meters - the difference between the earth ellipsoid surface and mean-sea-level (geoid) surface defined by the reference datum used in the position solution<br/>
|
||||
/// '-' = mean-sea-level surface below ellipsoid.
|
||||
/// </summary>
|
||||
public double GeoidalSeparation { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Age of differential data - <see cref="TimeSpan.MaxValue"/> if talker ID is GN, additional GNS messages follow with GP and/or GL Age of differential data
|
||||
/// </summary>
|
||||
public TimeSpan TimeSinceLastDgpsUpdate { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// eference station ID1, range 0000-4095 - Null if talker ID is GN, additional GNS messages follow with GP and/or GL Reference station ID
|
||||
/// </summary>
|
||||
public string DgpsStationId { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Navigational status
|
||||
/// </summary>
|
||||
public NavigationalStatus Status { get; private set; }
|
||||
}
|
||||
}
|
||||
|
|
@ -26,7 +26,7 @@ namespace NmeaParser.Nmea.Gnss
|
|||
/// <summary>
|
||||
/// Global Positioning System Fix Data
|
||||
/// </summary>
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Gpgga")]
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Gngga")]
|
||||
[NmeaMessageType("GNGGA")]
|
||||
public class Gngga : Gga
|
||||
{
|
||||
|
|
|
|||
34
src/NmeaParser/Nmea/Gnss/Gngll.cs
Normal file
34
src/NmeaParser/Nmea/Gnss/Gngll.cs
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
//
|
||||
// Copyright (c) 2014 Morten Nielsen
|
||||
//
|
||||
// Licensed under the Microsoft Public License (Ms-PL) (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://opensource.org/licenses/Ms-PL.html
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
//
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace NmeaParser.Nmea.Gnss
|
||||
{
|
||||
/// <summary>
|
||||
/// Geographic position, latitude / longitude
|
||||
/// </summary>
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Gngll")]
|
||||
[NmeaMessageType("GNGLL")]
|
||||
public class Gngll : Gll
|
||||
{
|
||||
}
|
||||
}
|
||||
15
src/NmeaParser/Nmea/Gnss/Gngns.cs
Normal file
15
src/NmeaParser/Nmea/Gnss/Gngns.cs
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace NmeaParser.Nmea.Gps
|
||||
{
|
||||
/// <summary>
|
||||
/// Fixes data for single or combined (GPS, GLONASS, possible future satellite systems, and systems combining these) satellite navigation systems
|
||||
/// </summary>
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Gngns")]
|
||||
[NmeaMessageType("GNGNS")]
|
||||
public class Gngns : Gns
|
||||
{
|
||||
}
|
||||
}
|
||||
34
src/NmeaParser/Nmea/Gnss/Gngsa.cs
Normal file
34
src/NmeaParser/Nmea/Gnss/Gngsa.cs
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
//
|
||||
// Copyright (c) 2014 Morten Nielsen
|
||||
//
|
||||
// Licensed under the Microsoft Public License (Ms-PL) (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://opensource.org/licenses/Ms-PL.html
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
//
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace NmeaParser.Nmea.Gnss
|
||||
{
|
||||
/// <summary>
|
||||
/// Global Positioning System Fix Data
|
||||
/// </summary>
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Gngsa")]
|
||||
[NmeaMessageType("GNGSA")]
|
||||
public class Gngsa : Gsa
|
||||
{
|
||||
}
|
||||
}
|
||||
|
|
@ -26,7 +26,7 @@ namespace NmeaParser.Nmea.Gnss
|
|||
/// <summary>
|
||||
/// Recommended Minimum
|
||||
/// </summary>
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Gprmc")]
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Gnrmc")]
|
||||
[NmeaMessageType("GNRMC")]
|
||||
public class Gnrmc : Rmc
|
||||
{
|
||||
|
|
|
|||
|
|
@ -28,47 +28,7 @@ namespace NmeaParser.Nmea.Gps
|
|||
/// </summary>
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Gpgll")]
|
||||
[NmeaMessageType("GPGLL")]
|
||||
public class Gpgll : NmeaMessage
|
||||
public class Gpgll : Gll
|
||||
{
|
||||
/// <summary>
|
||||
/// Called when the message is being loaded.
|
||||
/// </summary>
|
||||
/// <param name="message">The NMEA message values.</param>
|
||||
protected override void OnLoadMessage(string[] message)
|
||||
{
|
||||
if (message == null || message.Length < 4)
|
||||
throw new ArgumentException("Invalid GPGLL", "message");
|
||||
Latitude = NmeaMessage.StringToLatitude(message[0], message[1]);
|
||||
Longitude = NmeaMessage.StringToLongitude(message[2], message[3]);
|
||||
if (message.Length >= 5) //Some older GPS doesn't broadcast fix time
|
||||
{
|
||||
FixTime = StringToTimeSpan(message[4]);
|
||||
}
|
||||
DataActive = (message.Length < 6 || message[5] == "A");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Latitude
|
||||
/// </summary>
|
||||
public double Latitude { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Longitude
|
||||
/// </summary>
|
||||
public double Longitude { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Time since last DGPS update
|
||||
/// </summary>
|
||||
public TimeSpan FixTime { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets a value indicating whether data is active.
|
||||
/// </summary>
|
||||
/// <value>
|
||||
/// <c>true</c> if data is active; otherwise, <c>false</c>.
|
||||
/// </value>
|
||||
public bool DataActive { get; private set; }
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ namespace NmeaParser.Nmea.Gps
|
|||
/// </summary>
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Gpgsa")]
|
||||
[NmeaMessageType("GPGSA")]
|
||||
public class Gpgsa : NmeaMessage
|
||||
public class Gpgsa : Gsa
|
||||
{
|
||||
/// <summary>
|
||||
/// Mode selection
|
||||
|
|
@ -63,76 +63,5 @@ namespace NmeaParser.Nmea.Gps
|
|||
/// </summary>
|
||||
Fix3D = 3
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Called when the message is being loaded.
|
||||
/// </summary>
|
||||
/// <param name="message">The NMEA message values.</param>
|
||||
protected override void OnLoadMessage(string[] message)
|
||||
{
|
||||
if (message == null || message.Length < 17)
|
||||
throw new ArgumentException("Invalid GPGSA", "message");
|
||||
|
||||
GpsMode = message[0] == "A" ? ModeSelection.Auto : ModeSelection.Manual;
|
||||
FixMode = (Mode)int.Parse(message[1], CultureInfo.InvariantCulture);
|
||||
|
||||
List<int> svs = new List<int>();
|
||||
for (int i = 2; i < 14; i++)
|
||||
{
|
||||
int id = -1;
|
||||
if (message[i].Length > 0 && int.TryParse(message[i], out id))
|
||||
svs.Add(id);
|
||||
}
|
||||
SVs = svs.ToArray();
|
||||
|
||||
double tmp;
|
||||
if (double.TryParse(message[14], NumberStyles.Float, CultureInfo.InvariantCulture, out tmp))
|
||||
Pdop = tmp;
|
||||
else
|
||||
Pdop = double.NaN;
|
||||
|
||||
if (double.TryParse(message[15], NumberStyles.Float, CultureInfo.InvariantCulture, out tmp))
|
||||
Hdop = tmp;
|
||||
else
|
||||
Hdop = double.NaN;
|
||||
|
||||
if (double.TryParse(message[16], NumberStyles.Float, CultureInfo.InvariantCulture, out tmp))
|
||||
Vdop = tmp;
|
||||
else
|
||||
Vdop = double.NaN;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Mode
|
||||
/// </summary>
|
||||
public ModeSelection GpsMode { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Mode
|
||||
/// </summary>
|
||||
public Mode FixMode { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// IDs of SVs used in position fix
|
||||
/// </summary>
|
||||
public IReadOnlyList<int> SVs { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Dilution of precision
|
||||
/// </summary>
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Pdop")]
|
||||
public double Pdop { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Horizontal dilution of precision
|
||||
/// </summary>
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Hdop")]
|
||||
public double Hdop { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Vertical dilution of precision
|
||||
/// </summary>
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Vdop")]
|
||||
public double Vdop { get; private set; }
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -23,149 +23,92 @@ using System.Threading.Tasks;
|
|||
|
||||
namespace NmeaParser.Nmea.Gps
|
||||
{
|
||||
/// <summary>
|
||||
/// GPS Satellites in view
|
||||
/// </summary>
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Gpgsv")]
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1710:IdentifiersShouldHaveCorrectSuffix")]
|
||||
[NmeaMessageType("GPGSV")]
|
||||
public sealed class Gpgsv : NmeaMessage, IMultiPartMessage<SatelliteVehicle>
|
||||
{
|
||||
/// <summary>
|
||||
/// Called when the message is being loaded.
|
||||
/// </summary>
|
||||
/// <param name="message">The NMEA message values.</param>
|
||||
protected override void OnLoadMessage(string[] message)
|
||||
{
|
||||
if (message == null || message.Length < 3)
|
||||
throw new ArgumentException("Invalid GPGSV", "message");
|
||||
|
||||
TotalMessages = int.Parse(message[0], CultureInfo.InvariantCulture);
|
||||
MessageNumber = int.Parse(message[1], CultureInfo.InvariantCulture);
|
||||
SVsInView = int.Parse(message[2], CultureInfo.InvariantCulture);
|
||||
/// <summary>
|
||||
/// GLONASS Satellites in view
|
||||
/// </summary>
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Gpgsv")]
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1710:IdentifiersShouldHaveCorrectSuffix")]
|
||||
[NmeaMessageType("GPGSV")]
|
||||
public sealed class Gpgsv : Gsv
|
||||
{
|
||||
}
|
||||
|
||||
List<SatelliteVehicle> svs = new List<SatelliteVehicle>();
|
||||
for (int i = 3; i < message.Length - 3; i += 4)
|
||||
{
|
||||
if (message[i].Length == 0)
|
||||
continue;
|
||||
else
|
||||
svs.Add(new SatelliteVehicle(message, i));
|
||||
}
|
||||
this.SVs = svs.ToArray();
|
||||
}
|
||||
/// <summary>
|
||||
/// Satellite vehicle
|
||||
/// </summary>
|
||||
public sealed class SatelliteVehicle
|
||||
{
|
||||
internal SatelliteVehicle(string[] message, int startIndex)
|
||||
{
|
||||
PrnNumber = int.Parse(message[startIndex], CultureInfo.InvariantCulture);
|
||||
Elevation = double.Parse(message[startIndex + 1], CultureInfo.InvariantCulture);
|
||||
Azimuth = double.Parse(message[startIndex + 2], CultureInfo.InvariantCulture);
|
||||
int snr = -1;
|
||||
if (int.TryParse(message[startIndex + 3], out snr))
|
||||
SignalToNoiseRatio = snr;
|
||||
}
|
||||
/// <summary>
|
||||
/// SV PRN number
|
||||
/// </summary>
|
||||
public int PrnNumber { get; set; }
|
||||
/// <summary>
|
||||
/// Elevation in degrees, 90 maximum
|
||||
/// </summary>
|
||||
public double Elevation { get; private set; }
|
||||
/// <summary>
|
||||
/// Azimuth, degrees from true north, 000 to 359
|
||||
/// </summary>
|
||||
public double Azimuth { get; private set; }
|
||||
/// <summary>
|
||||
/// Signal-to-Noise ratio, 0-99 dB (-1 when not tracking)
|
||||
/// </summary>
|
||||
public int SignalToNoiseRatio { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Total number of messages of this type in this cycle
|
||||
/// </summary>
|
||||
public int TotalMessages { get; private set; }
|
||||
/// <summary>
|
||||
/// Satellite system
|
||||
/// </summary>
|
||||
public SatelliteSystem System
|
||||
{
|
||||
get
|
||||
{
|
||||
if (PrnNumber >= 1 && PrnNumber <= 32)
|
||||
return SatelliteSystem.Gps;
|
||||
if (PrnNumber >= 33 && PrnNumber <= 64)
|
||||
return SatelliteSystem.Waas;
|
||||
if (PrnNumber >= 65 && PrnNumber <= 96)
|
||||
return SatelliteSystem.Glonass;
|
||||
return SatelliteSystem.Unknown;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Message number
|
||||
/// </summary>
|
||||
public int MessageNumber { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Total number of SVs in view
|
||||
/// </summary>
|
||||
public int SVsInView { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Dilution of precision
|
||||
/// </summary>
|
||||
public IReadOnlyList<SatelliteVehicle> SVs { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Returns an enumerator that iterates through the collection.
|
||||
/// </summary>
|
||||
/// <returns> A System.Collections.Generic.IEnumerator{SatelliteVehicle} that can be used to iterate through the collection.</returns>
|
||||
public IEnumerator<SatelliteVehicle> GetEnumerator()
|
||||
{
|
||||
foreach(var sv in SVs)
|
||||
yield return sv;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns an enumerator that iterates through a collection.
|
||||
/// </summary>
|
||||
/// <returns> An System.Collections.IEnumerator object that can be used to iterate through the collection.</returns>
|
||||
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
|
||||
{
|
||||
return GetEnumerator();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Satellite vehicle
|
||||
/// </summary>
|
||||
public sealed class SatelliteVehicle
|
||||
{
|
||||
internal SatelliteVehicle(string[] message, int startIndex)
|
||||
{
|
||||
PrnNumber = int.Parse(message[startIndex], CultureInfo.InvariantCulture);
|
||||
Elevation = double.Parse(message[startIndex+1], CultureInfo.InvariantCulture);
|
||||
Azimuth = double.Parse(message[startIndex + 2], CultureInfo.InvariantCulture);
|
||||
int snr = -1;
|
||||
if (int.TryParse(message[startIndex + 3], out snr))
|
||||
SignalToNoiseRatio = snr;
|
||||
}
|
||||
/// <summary>
|
||||
/// SV PRN number
|
||||
/// </summary>
|
||||
public int PrnNumber { get; set; }
|
||||
/// <summary>
|
||||
/// Elevation in degrees, 90 maximum
|
||||
/// </summary>
|
||||
public double Elevation { get; private set; }
|
||||
/// <summary>
|
||||
/// Azimuth, degrees from true north, 000 to 359
|
||||
/// </summary>
|
||||
public double Azimuth { get; private set; }
|
||||
/// <summary>
|
||||
/// Signal-to-Noise ratio, 0-99 dB (-1 when not tracking)
|
||||
/// </summary>
|
||||
public int SignalToNoiseRatio { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Satellite system
|
||||
/// </summary>
|
||||
public SatelliteSystem System
|
||||
{
|
||||
get
|
||||
{
|
||||
if (PrnNumber >= 1 && PrnNumber <= 32)
|
||||
return SatelliteSystem.Gps;
|
||||
if (PrnNumber >= 33 && PrnNumber <= 64)
|
||||
return SatelliteSystem.Waas;
|
||||
if (PrnNumber >= 65 && PrnNumber <= 96)
|
||||
return SatelliteSystem.Glonass;
|
||||
return SatelliteSystem.Unknown;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Satellite system
|
||||
/// </summary>
|
||||
public enum SatelliteSystem
|
||||
{
|
||||
/// <summary>
|
||||
/// Unknown
|
||||
/// </summary>
|
||||
Unknown,
|
||||
/// <summary>
|
||||
/// GPS - Global Positioning System (NAVSTAR)
|
||||
/// </summary>
|
||||
Gps,
|
||||
/// <summary>
|
||||
/// WAAS - Wide Area Augmentation System
|
||||
/// </summary>
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Waas")]
|
||||
Waas,
|
||||
/// <summary>
|
||||
/// GLONASS - Globalnaya navigatsionnaya sputnikovaya sistema
|
||||
/// </summary>
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Glonass")]
|
||||
Glonass
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Satellite system
|
||||
/// </summary>
|
||||
public enum SatelliteSystem
|
||||
{
|
||||
/// <summary>
|
||||
/// Unknown
|
||||
/// </summary>
|
||||
Unknown,
|
||||
/// <summary>
|
||||
/// GPS - Global Positioning System (NAVSTAR)
|
||||
/// </summary>
|
||||
Gps,
|
||||
/// <summary>
|
||||
/// WAAS - Wide Area Augmentation System
|
||||
/// </summary>
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Waas")]
|
||||
Waas,
|
||||
/// <summary>
|
||||
/// GLONASS - Globalnaya navigatsionnaya sputnikovaya sistema
|
||||
/// </summary>
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Glonass")]
|
||||
Glonass,
|
||||
/// <summary>
|
||||
/// Galileo
|
||||
/// </summary>
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Galileo")]
|
||||
Galileo
|
||||
}
|
||||
}
|
||||
15
src/NmeaParser/Nmea/Gps/Gpgns.cs
Normal file
15
src/NmeaParser/Nmea/Gps/Gpgns.cs
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace NmeaParser.Nmea.Gps
|
||||
{
|
||||
/// <summary>
|
||||
/// Fixes data for GPS satellite navigation systems
|
||||
/// </summary>
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Gpgns")]
|
||||
[NmeaMessageType("GPGNS")]
|
||||
public class Gpgns : Gns
|
||||
{
|
||||
}
|
||||
}
|
||||
103
src/NmeaParser/Nmea/Gsa.cs
Normal file
103
src/NmeaParser/Nmea/Gsa.cs
Normal file
|
|
@ -0,0 +1,103 @@
|
|||
//
|
||||
// Copyright (c) 2014 Morten Nielsen
|
||||
//
|
||||
// Licensed under the Microsoft Public License (Ms-PL) (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://opensource.org/licenses/Ms-PL.html
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
//
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace NmeaParser.Nmea
|
||||
{
|
||||
/// <summary>
|
||||
/// Global Positioning System Fix Data
|
||||
/// </summary>
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Gsa")]
|
||||
public abstract class Gsa : NmeaMessage
|
||||
{
|
||||
/// <summary>
|
||||
/// Called when the message is being loaded.
|
||||
/// </summary>
|
||||
/// <param name="message">The NMEA message values.</param>
|
||||
protected override void OnLoadMessage(string[] message)
|
||||
{
|
||||
if (message == null || message.Length < 17)
|
||||
throw new ArgumentException("Invalid GPGSA", "message");
|
||||
|
||||
GpsMode = message[0] == "A" ? Gps.Gpgsa.ModeSelection.Auto : Gps.Gpgsa.ModeSelection.Manual;
|
||||
FixMode = (Gps.Gpgsa.Mode)int.Parse(message[1], CultureInfo.InvariantCulture);
|
||||
|
||||
List<int> svs = new List<int>();
|
||||
for (int i = 2; i < 14; i++)
|
||||
{
|
||||
int id = -1;
|
||||
if (message[i].Length > 0 && int.TryParse(message[i], out id))
|
||||
svs.Add(id);
|
||||
}
|
||||
SVs = svs.ToArray();
|
||||
|
||||
double tmp;
|
||||
if (double.TryParse(message[14], NumberStyles.Float, CultureInfo.InvariantCulture, out tmp))
|
||||
Pdop = tmp;
|
||||
else
|
||||
Pdop = double.NaN;
|
||||
|
||||
if (double.TryParse(message[15], NumberStyles.Float, CultureInfo.InvariantCulture, out tmp))
|
||||
Hdop = tmp;
|
||||
else
|
||||
Hdop = double.NaN;
|
||||
|
||||
if (double.TryParse(message[16], NumberStyles.Float, CultureInfo.InvariantCulture, out tmp))
|
||||
Vdop = tmp;
|
||||
else
|
||||
Vdop = double.NaN;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Mode
|
||||
/// </summary>
|
||||
public Gps.Gpgsa.ModeSelection GpsMode { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Mode
|
||||
/// </summary>
|
||||
public Gps.Gpgsa.Mode FixMode { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// IDs of SVs used in position fix
|
||||
/// </summary>
|
||||
public IReadOnlyList<int> SVs { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Dilution of precision
|
||||
/// </summary>
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Pdop")]
|
||||
public double Pdop { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Horizontal dilution of precision
|
||||
/// </summary>
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Hdop")]
|
||||
public double Hdop { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Vertical dilution of precision
|
||||
/// </summary>
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Vdop")]
|
||||
public double Vdop { get; private set; }
|
||||
}
|
||||
}
|
||||
97
src/NmeaParser/Nmea/Gsv.cs
Normal file
97
src/NmeaParser/Nmea/Gsv.cs
Normal file
|
|
@ -0,0 +1,97 @@
|
|||
//
|
||||
// Copyright (c) 2014 Morten Nielsen
|
||||
//
|
||||
// Licensed under the Microsoft Public License (Ms-PL) (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://opensource.org/licenses/Ms-PL.html
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
//
|
||||
|
||||
using NmeaParser.Nmea.Gps;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace NmeaParser.Nmea
|
||||
{
|
||||
/// <summary>
|
||||
/// GPS Satellites in view
|
||||
/// </summary>
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Gsv")]
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1710:IdentifiersShouldHaveCorrectSuffix")]
|
||||
public abstract class Gsv : NmeaMessage, IMultiPartMessage<SatelliteVehicle>
|
||||
{
|
||||
/// <summary>
|
||||
/// Called when the message is being loaded.
|
||||
/// </summary>
|
||||
/// <param name="message">The NMEA message values.</param>
|
||||
protected override void OnLoadMessage(string[] message)
|
||||
{
|
||||
if (message == null || message.Length < 3)
|
||||
throw new ArgumentException("Invalid GSV", "message");
|
||||
|
||||
TotalMessages = int.Parse(message[0], CultureInfo.InvariantCulture);
|
||||
MessageNumber = int.Parse(message[1], CultureInfo.InvariantCulture);
|
||||
SVsInView = int.Parse(message[2], CultureInfo.InvariantCulture);
|
||||
|
||||
List<SatelliteVehicle> svs = new List<SatelliteVehicle>();
|
||||
for (int i = 3; i < message.Length - 3; i += 4)
|
||||
{
|
||||
if (message[i].Length == 0)
|
||||
continue;
|
||||
else
|
||||
svs.Add(new SatelliteVehicle(message, i));
|
||||
}
|
||||
this.SVs = svs.ToArray();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Total number of messages of this type in this cycle
|
||||
/// </summary>
|
||||
public int TotalMessages { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Message number
|
||||
/// </summary>
|
||||
public int MessageNumber { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Total number of SVs in view
|
||||
/// </summary>
|
||||
public int SVsInView { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Dilution of precision
|
||||
/// </summary>
|
||||
public IReadOnlyList<SatelliteVehicle> SVs { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Returns an enumerator that iterates through the collection.
|
||||
/// </summary>
|
||||
/// <returns> A System.Collections.Generic.IEnumerator{SatelliteVehicle} that can be used to iterate through the collection.</returns>
|
||||
public IEnumerator<SatelliteVehicle> GetEnumerator()
|
||||
{
|
||||
foreach(var sv in SVs)
|
||||
yield return sv;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns an enumerator that iterates through a collection.
|
||||
/// </summary>
|
||||
/// <returns> An System.Collections.IEnumerator object that can be used to iterate through the collection.</returns>
|
||||
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
|
||||
{
|
||||
return GetEnumerator();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -9,16 +9,19 @@
|
|||
<Authors>Morten Nielsen</Authors>
|
||||
<Company>Morten Nielsen</Company>
|
||||
<Description>An NMEA stream parser for serial port, bluetooth and file-based nmea simulation.</Description>
|
||||
<PackageTags>nmea winrt wpf win8 win8.1 wp8.1 uwp xamarin gps serialport bluetooth</PackageTags>
|
||||
<PackageTags>nmea winrt wpf uwp xamarin gps serialport bluetooth</PackageTags>
|
||||
<PackageId>SharpGIS.NmeaParser</PackageId>
|
||||
<Version>1.8.0</Version>
|
||||
<Version>1.9.0</Version>
|
||||
<PackageLicenseUrl>http://opensource.org/licenses/ms-pl.html</PackageLicenseUrl>
|
||||
<PackageProjectUrl>https://github.com/dotMorten/NmeaParser</PackageProjectUrl>
|
||||
<RepositoryUrl>https://github.com/dotMorten/NmeaParser</RepositoryUrl>
|
||||
<NeutralLanguage>en-US</NeutralLanguage>
|
||||
<Copyright>Copyright © Morten Nielsen 2015-2017</Copyright>
|
||||
<OutDir>$(MSBuildThisFileDirectory)..\Bin\$(Configuration)</OutDir>
|
||||
<PackageOutputPath>$(OutDir)</PackageOutputPath>
|
||||
<OutputPath>$(MSBuildThisFileDirectory)..\Bin\$(Configuration)</OutputPath>
|
||||
<PackageOutputPath>$(OutDir)</PackageOutputPath>
|
||||
<AssemblyVersion>1.9.0.0</AssemblyVersion>
|
||||
<FileVersion>1.9.0.0</FileVersion>
|
||||
<PackageReleaseNotes>Added new GLONASS and GALILEO. Moved more GPS message to abstract base classes for better handling of multiple satelitte constellations.</PackageReleaseNotes>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(TargetFramework)' == 'netstandard1.4'">
|
||||
|
|
@ -50,8 +53,8 @@
|
|||
|
||||
<ItemGroup Condition="'$(TargetFramework)' == 'uap10.0'">
|
||||
<PackageReference Include="Microsoft.NETCore.UniversalWindowsPlatform" Version="5.1.0" />
|
||||
<PackageReference Include="System.Numerics.Vectors" Version="4.1.0" />
|
||||
<EmbeddedResource Include="**\*.rd.xml" />
|
||||
<PackageReference Include="System.Numerics.Vectors" Version="4.1.0" />
|
||||
<EmbeddedResource Include="**\*.rd.xml" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
|
|||
|
|
@ -38,10 +38,6 @@
|
|||
<RestoreProjectStyle>PackageReference</RestoreProjectStyle>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="NmeaParser">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\NmeaParser\bin\$(Configuration)\net451\NmeaParser.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Xml" />
|
||||
|
|
@ -171,6 +167,12 @@
|
|||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\NmeaParser\NmeaParser.csproj">
|
||||
<Project>{1adc3666-1ddb-48c4-9811-1e58b6d09a7c}</Project>
|
||||
<Name>NmeaParser</Name>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
|
|
|
|||
544
src/TrimbleR2SampleData.txt
Normal file
544
src/TrimbleR2SampleData.txt
Normal file
|
|
@ -0,0 +1,544 @@
|
|||
$GNGGA,235647.00,3403.47162394,N,11711.80927093,W,5,10,1.2,403.600,M,-32.133,M,1.0,0000*61
|
||||
$PTNL,GGK,235647.00,122017,3403.47162394,N,11711.80927093,W,12,10,2.9,EHT371.467,M*54
|
||||
$GNGLL,3403.47162394,N,11711.80927093,W,235647.00,A,D*64
|
||||
$GNGNS,235647.00,3403.47162394,N,11711.80927093,W,FFNNN,10,1.2,403.600,-32.133,,*2E
|
||||
$GPGNS,235647.00,,,,,,6,,,,1.0,0*4B
|
||||
$GLGNS,235647.00,,,,,,4,,,,1.0,0*55
|
||||
$GNGSA,A,3,26,9,3,16,7,23,,,,,,,2.9,1.2,2.6*1F
|
||||
$GNGSA,A,3,73,74,72,71,,,,,,,,,2.9,1.2,2.6*24
|
||||
$GNGST,235647.00,0.003,0.054,0.044,139.7,0.050,0.049,0.070*49
|
||||
$GPGSV,4,1,13,26,33,050,38,9,40,314,43,3,55,188,44,23,68,354,50*72
|
||||
$GPGSV,4,2,13,16,56,082,48,7,28,256,43*44
|
||||
$GLGSV,4,3,13,73,52,022,52,74,62,247,50,72,44,331,50,71,78,111,51*6A
|
||||
$GAGSV,4,4,13,19,82,349,44,1,44,220,44,4,24,314,45*52
|
||||
$GNRMC,235647.00,A,3403.47162394,N,11711.80927093,W,0.003,0.000,201217,12.0194,E,D*33
|
||||
$GNVTG,248.04,T,236.01,M,0.00,N,0.01,K,D*35
|
||||
$GNZDA,235647.05,20,12,2017,00,00*79
|
||||
$GNGGA,235648.00,3403.47162869,N,11711.80928436,W,5,10,1.2,403.633,M,-32.133,M,1.0,0000*63
|
||||
$PTNL,GGK,235648.00,122017,3403.47162869,N,11711.80928436,W,12,10,2.9,EHT371.500,M*56
|
||||
$GNGLL,3403.47162869,N,11711.80928436,W,235648.00,A,D*66
|
||||
$GNGNS,235648.00,3403.47162869,N,11711.80928436,W,FFNNN,10,1.2,403.633,-32.133,,*2C
|
||||
$GPGNS,235648.00,,,,,,6,,,,1.0,0*44
|
||||
$GLGNS,235648.00,,,,,,4,,,,1.0,0*5A
|
||||
$GNGSA,A,3,26,9,3,16,7,23,,,,,,,2.9,1.2,2.6*1F
|
||||
$GNGSA,A,3,73,74,72,71,,,,,,,,,2.9,1.2,2.6*24
|
||||
$GNGST,235648.00,0.003,0.054,0.044,139.7,0.050,0.049,0.070*46
|
||||
$GPGSV,4,1,13,26,33,050,34,9,40,314,44,3,55,188,43,23,68,354,52*7C
|
||||
$GPGSV,4,2,13,16,56,082,48,7,28,256,43*44
|
||||
$GLGSV,4,3,13,73,52,022,52,74,62,247,50,72,44,331,50,71,78,111,52*69
|
||||
$GAGSV,4,4,13,19,82,349,44,1,44,220,44,4,24,314,46*51
|
||||
$GNRMC,235648.00,A,3403.47162869,N,11711.80928436,W,0.028,322.683,201217,12.0194,E,D*36
|
||||
$GNVTG,322.68,T,310.66,M,0.03,N,0.05,K,D*31
|
||||
$GNZDA,235648.05,20,12,2017,00,00*76
|
||||
$GNGGA,235649.00,3403.47162781,N,11711.80928227,W,5,10,1.2,403.637,M,-32.133,M,1.0,0000*69
|
||||
$PTNL,GGK,235649.00,122017,3403.47162781,N,11711.80928227,W,12,10,2.9,EHT371.504,M*5C
|
||||
$GNGLL,3403.47162781,N,11711.80928227,W,235649.00,A,D*68
|
||||
$GNGNS,235649.00,3403.47162781,N,11711.80928227,W,FFNNN,10,1.2,403.637,-32.133,,*26
|
||||
$GPGNS,235649.00,,,,,,6,,,,1.0,0*45
|
||||
$GLGNS,235649.00,,,,,,4,,,,1.0,0*5B
|
||||
$GNGSA,A,3,26,9,3,16,7,23,,,,,,,2.9,1.2,2.6*1F
|
||||
$GNGSA,A,3,73,74,72,71,,,,,,,,,2.9,1.2,2.6*24
|
||||
$GNGST,235649.00,0.003,0.054,0.044,137.8,0.050,0.049,0.070*46
|
||||
$GPGSV,4,1,14,26,33,050,34,9,40,314,43,3,55,188,43,23,68,354,51*7F
|
||||
$GPGSV,4,2,14,16,56,082,48,7,28,256,43,6,8,295,37*77
|
||||
$GLGSV,4,3,14,73,52,022,52,74,62,247,50,72,44,331,50,71,78,111,51*6D
|
||||
$GAGSV,4,4,14,19,82,349,44,1,44,220,44,4,24,314,46*56
|
||||
$GNRMC,235649.00,A,3403.47162781,N,11711.80928227,W,0.014,104.669,201217,12.0194,E,D*35
|
||||
$GNVTG,104.67,T,92.64,M,0.01,N,0.03,K,D*07
|
||||
$GNZDA,235649.05,20,12,2017,00,00*77
|
||||
$GNGGA,235650.00,3403.47162865,N,11711.80928186,W,5,10,1.2,403.606,M,-32.133,M,1.0,0000*6E
|
||||
$PTNL,GGK,235650.00,122017,3403.47162865,N,11711.80928186,W,12,10,2.9,EHT371.473,M*58
|
||||
$GNGLL,3403.47162865,N,11711.80928186,W,235650.00,A,D*6D
|
||||
$GNGNS,235650.00,3403.47162865,N,11711.80928186,W,FFNNN,10,1.2,403.606,-32.133,,*21
|
||||
$GPGNS,235650.00,,,,,,6,,,,1.0,0*4D
|
||||
$GLGNS,235650.00,,,,,,4,,,,1.0,0*53
|
||||
$GNGSA,A,3,26,9,3,16,7,23,,,,,,,2.9,1.2,2.6*1F
|
||||
$GNGSA,A,3,73,74,72,71,,,,,,,,,2.9,1.2,2.6*24
|
||||
$GNGST,235650.00,0.003,0.054,0.044,139.6,0.050,0.049,0.070*4E
|
||||
$GPGSV,4,1,14,26,33,050,36,9,40,314,41,3,55,188,43,23,68,354,51*7F
|
||||
$GPGSV,4,2,14,16,56,082,48,7,28,256,42,6,8,295,36*77
|
||||
$GLGSV,4,3,14,73,52,022,52,74,62,247,50,72,44,331,51,71,78,111,51*6C
|
||||
$GAGSV,4,4,14,19,82,349,44,1,44,220,44,4,24,314,46*56
|
||||
$GNRMC,235650.00,A,3403.47162865,N,11711.80928186,W,0.017,335.730,201217,12.0194,E,D*3E
|
||||
$GNVTG,335.73,T,323.71,M,0.02,N,0.03,K,D*3C
|
||||
$GNZDA,235650.05,20,12,2017,00,00*7F
|
||||
$GNGGA,235651.00,3403.47162766,N,11711.80927378,W,5,10,1.2,403.594,M,-32.133,M,1.0,0000*67
|
||||
$PTNL,GGK,235651.00,122017,3403.47162766,N,11711.80927378,W,12,10,2.9,EHT371.461,M*5A
|
||||
$GNGLL,3403.47162766,N,11711.80927378,W,235651.00,A,D*6C
|
||||
$GNGNS,235651.00,3403.47162766,N,11711.80927378,W,FFNNN,10,1.2,403.594,-32.133,,*28
|
||||
$GPGNS,235651.00,,,,,,6,,,,1.0,0*4C
|
||||
$GLGNS,235651.00,,,,,,4,,,,1.0,0*52
|
||||
$GNGSA,A,3,26,9,3,16,7,23,,,,,,,2.9,1.2,2.6*1F
|
||||
$GNGSA,A,3,73,74,72,71,,,,,,,,,2.9,1.2,2.6*24
|
||||
$GNGST,235651.00,0.003,0.054,0.044,139.9,0.050,0.049,0.070*40
|
||||
$GPGSV,4,1,14,26,33,050,35,9,40,314,44,3,55,187,44,23,68,354,51*71
|
||||
$GPGSV,4,2,14,16,56,082,48,7,28,256,44,6,8,295,38*7F
|
||||
$GLGSV,4,3,14,73,52,022,52,74,62,248,50,72,44,331,50,71,78,111,52*61
|
||||
$GAGSV,4,4,14,19,82,349,44,1,44,220,44,4,24,314,45*55
|
||||
$GNRMC,235651.00,A,3403.47162766,N,11711.80927378,W,0.015,51.337,201217,12.0194,E,D*0F
|
||||
$GNVTG,51.34,T,39.31,M,0.01,N,0.03,K,D*31
|
||||
$GNZDA,235651.05,20,12,2017,00,00*7E
|
||||
$GNGGA,235652.00,3403.47162304,N,11711.80927561,W,5,10,1.2,403.585,M,-32.133,M,1.0,0000*6A
|
||||
$PTNL,GGK,235652.00,122017,3403.47162304,N,11711.80927561,W,12,10,2.9,EHT371.453,M*56
|
||||
$GNGLL,3403.47162304,N,11711.80927561,W,235652.00,A,D*61
|
||||
$GNGNS,235652.00,3403.47162304,N,11711.80927561,W,FFNNN,10,1.2,403.585,-32.133,,*25
|
||||
$GPGNS,235652.00,,,,,,6,,,,1.0,0*4F
|
||||
$GLGNS,235652.00,,,,,,4,,,,1.0,0*51
|
||||
$GNGSA,A,3,26,9,3,16,7,23,,,,,,,2.9,1.2,2.6*1F
|
||||
$GNGSA,A,3,73,74,72,71,,,,,,,,,2.9,1.2,2.6*24
|
||||
$GNGST,235652.00,0.003,0.054,0.044,139.8,0.050,0.049,0.070*42
|
||||
$GPGSV,4,1,14,26,33,050,35,9,40,314,44,3,55,187,45,23,68,354,50*71
|
||||
$GPGSV,4,2,14,16,56,082,47,7,28,256,44,6,8,295,36*7E
|
||||
$GLGSV,4,3,14,73,52,022,52,74,62,248,51,72,44,331,51,71,78,111,51*62
|
||||
$GAGSV,4,4,14,19,82,349,44,1,44,220,43,4,24,314,46*51
|
||||
$GNRMC,235652.00,A,3403.47162304,N,11711.80927561,W,0.025,77.081,201217,12.0194,E,D*0B
|
||||
$GNVTG,77.08,T,65.06,M,0.03,N,0.05,K,D*33
|
||||
$GNZDA,235652.05,20,12,2017,00,00*7D
|
||||
$GNGGA,235653.00,3403.47161868,N,11711.80928413,W,5,10,1.2,403.623,M,-32.133,M,1.0,0000*6D
|
||||
$PTNL,GGK,235653.00,122017,3403.47161868,N,11711.80928413,W,12,10,2.9,EHT371.490,M*51
|
||||
$GNGLL,3403.47161868,N,11711.80928413,W,235653.00,A,D*69
|
||||
$GNGNS,235653.00,3403.47161868,N,11711.80928413,W,FFNNN,10,1.2,403.623,-32.133,,*22
|
||||
$GPGNS,235653.00,,,,,,6,,,,1.0,0*4E
|
||||
$GLGNS,235653.00,,,,,,4,,,,1.0,0*50
|
||||
$GNGSA,A,3,26,9,3,16,7,23,,,,,,,2.9,1.2,2.6*1F
|
||||
$GNGSA,A,3,73,74,72,71,,,,,,,,,2.9,1.2,2.6*24
|
||||
$GNGST,235653.00,0.003,0.054,0.045,140.0,0.050,0.049,0.070*44
|
||||
$GPGSV,4,1,14,26,33,050,38,9,40,314,43,3,55,187,45,23,68,354,51*7A
|
||||
$GPGSV,4,2,14,16,56,082,47,7,28,256,46,6,8,295,37*7D
|
||||
$GLGSV,4,3,14,73,52,022,52,74,62,248,49,72,44,331,51,71,78,111,51*6B
|
||||
$GAGSV,4,4,14,19,82,349,44,1,44,220,44,4,24,314,46*56
|
||||
$GNRMC,235653.00,A,3403.47161868,N,11711.80928413,W,0.071,278.869,201217,12.0194,E,D*31
|
||||
$GNVTG,278.87,T,266.84,M,0.07,N,0.13,K,D*31
|
||||
$GNZDA,235653.05,20,12,2017,00,00*7C
|
||||
$GNGGA,235654.00,3403.47163916,N,11711.80927277,W,5,10,1.2,403.525,M,-32.133,M,1.0,0000*6E
|
||||
$PTNL,GGK,235654.00,122017,3403.47163916,N,11711.80927277,W,12,10,2.9,EHT371.392,M*52
|
||||
$GNGLL,3403.47163916,N,11711.80927277,W,235654.00,A,D*6F
|
||||
$GNGNS,235654.00,3403.47163916,N,11711.80927277,W,FFNNN,10,1.2,403.525,-32.133,,*21
|
||||
$GPGNS,235654.00,,,,,,6,,,,1.0,0*49
|
||||
$GLGNS,235654.00,,,,,,4,,,,1.0,0*57
|
||||
$GNGSA,A,3,26,9,3,16,7,23,,,,,,,2.9,1.2,2.6*1F
|
||||
$GNGSA,A,3,73,74,72,71,,,,,,,,,2.9,1.2,2.6*24
|
||||
$GNGST,235654.00,0.003,0.054,0.044,136.1,0.050,0.049,0.070*42
|
||||
$GPGSV,4,1,14,26,33,050,38,9,40,314,33,3,55,187,40,23,68,354,43*7B
|
||||
$GPGSV,4,2,14,16,56,082,45,7,28,256,32,6,8,295,27*7D
|
||||
$GLGSV,4,3,14,73,52,022,44,74,62,248,45,72,44,331,42,71,78,111,47*65
|
||||
$GAGSV,4,4,14,19,82,349,39,1,44,220,36,4,24,314,36*5E
|
||||
$GNRMC,235654.00,A,3403.47163916,N,11711.80927277,W,0.047,13.239,201217,12.0194,E,D*02
|
||||
$GNVTG,13.24,T,1.22,M,0.05,N,0.09,K,D*01
|
||||
$GNZDA,235654.05,20,12,2017,00,00*7B
|
||||
$GNGGA,235655.00,3403.47141462,N,11711.80952375,W,2,10,1.3,403.211,M,-32.133,M,1.0,0000*66
|
||||
$PTNL,GGK,235655.00,122017,3403.47141462,N,11711.80952375,W,4,10,2.5,EHT371.078,M*60
|
||||
$GNGLL,3403.47141462,N,11711.80952375,W,235655.00,A,D*61
|
||||
$GNGNS,235655.00,3403.47141462,N,11711.80952375,W,DDNNN,10,1.3,403.211,-32.133,,*2E
|
||||
$GPGNS,235655.00,,,,,,6,,,,1.0,0*48
|
||||
$GLGNS,235655.00,,,,,,4,,,,1.0,0*56
|
||||
$GNGSA,A,3,3,7,16,23,9,26,,,,,,,2.5,1.3,2.2*16
|
||||
$GNGSA,A,3,71,72,73,74,,,,,,,,,2.5,1.3,2.2*2D
|
||||
$GNGST,235655.00,0.868,0.858,0.554,126.5,0.677,0.764,4.471*49
|
||||
$GPGSV,4,1,14,26,33,050,35,9,40,314,38,3,55,187,41,23,68,354,39*71
|
||||
$GPGSV,4,2,14,16,56,082,41,7,28,256,31,6,8,295,20*7D
|
||||
$GLGSV,4,3,14,73,52,022,38,74,62,248,35,72,44,331,38,71,78,111,34*60
|
||||
$GAGSV,4,4,14,19,82,349,28,1,44,220,34,4,24,314,33*59
|
||||
$GNRMC,235655.00,A,3403.47141462,N,11711.80952375,W,1.294,322.507,201217,12.0194,E,D*3A
|
||||
$GNVTG,322.51,T,310.48,M,1.29,N,2.40,K,D*3D
|
||||
$GNZDA,235655.04,20,12,2017,00,00*7B
|
||||
$GNGGA,235656.00,3403.47147891,N,11711.80935006,W,2,10,1.4,403.689,M,-32.133,M,1.0,0000*67
|
||||
$PTNL,GGK,235656.00,122017,3403.47147891,N,11711.80935006,W,4,10,3.5,EHT371.557,M*6A
|
||||
$GNGLL,3403.47147891,N,11711.80935006,W,235656.00,A,D*62
|
||||
$GNGNS,235656.00,3403.47147891,N,11711.80935006,W,DDNNN,10,1.4,403.689,-32.133,,*2F
|
||||
$GPGNS,235656.00,,,,,,6,,,,1.0,0*4B
|
||||
$GLGNS,235656.00,,,,,,4,,,,1.0,0*55
|
||||
$GNGSA,A,3,3,7,16,23,9,26,,,,,,,3.5,1.4,3.2*11
|
||||
$GNGSA,A,3,71,72,73,74,,,,,,,,,3.5,1.4,3.2*2A
|
||||
$GNGST,235656.00,0.308,0.770,0.545,126.4,0.633,0.699,3.491*49
|
||||
$GPGSV,4,1,14,26,33,050,38,9,40,314,47,3,55,187,47,23,68,354,49*75
|
||||
$GPGSV,4,2,14,16,56,082,50,7,28,256,36,6,8,295,34*7F
|
||||
$GLGSV,4,3,14,73,52,022,48,74,62,248,47,72,44,331,42,71,78,111,50*6D
|
||||
$GAGSV,4,4,14,19,82,349,39,1,44,220,38,4,24,314,34*52
|
||||
$GNRMC,235656.00,A,3403.47147891,N,11711.80935006,W,1.551,69.844,201217,12.0194,E,D*01
|
||||
$GNVTG,69.84,T,57.82,M,1.55,N,2.87,K,D*3F
|
||||
$GNZDA,235656.04,20,12,2017,00,00*78
|
||||
$GNGGA,235657.00,3403.47148352,N,11711.80892692,W,2,10,1.3,403.420,M,-32.133,M,1.0,0000*6C
|
||||
$PTNL,GGK,235657.00,122017,3403.47148352,N,11711.80892692,W,4,10,2.5,EHT371.288,M*63
|
||||
$GNGLL,3403.47148352,N,11711.80892692,W,235657.00,A,D*6F
|
||||
$GNGNS,235657.00,3403.47148352,N,11711.80892692,W,DDNNN,10,1.3,403.420,-32.133,,*24
|
||||
$GPGNS,235657.00,,,,,,6,,,,1.0,0*4A
|
||||
$GLGNS,235657.00,,,,,,4,,,,1.0,0*54
|
||||
$GNGSA,A,3,3,7,16,23,9,26,,,,,,,2.5,1.3,2.2*16
|
||||
$GNGSA,A,3,71,72,73,74,,,,,,,,,2.5,1.3,2.2*2D
|
||||
$GNGST,235657.00,0.101,0.757,0.466,111.8,0.516,0.724,1.861*4C
|
||||
$GPGSV,4,1,14,26,33,050,43,9,40,314,47,3,55,187,49,23,68,354,48*76
|
||||
$GPGSV,4,2,14,16,56,082,50,7,28,256,40,6,8,295,34*7E
|
||||
$GLGSV,4,3,14,73,52,022,47,74,62,248,47,72,44,331,42,71,78,111,49*6A
|
||||
$GAGSV,4,4,14,19,82,349,40,1,44,220,40,4,24,314,38*5F
|
||||
$GNRMC,235657.00,A,3403.47148352,N,11711.80892692,W,1.280,83.250,201217,12.0194,E,D*0C
|
||||
$GNVTG,83.25,T,71.23,M,1.28,N,2.37,K,D*3E
|
||||
$GNZDA,235657.04,20,12,2017,00,00*79
|
||||
$GNGGA,235658.00,3403.47147835,N,11711.80852392,W,2,10,1.3,403.183,M,-32.133,M,2.0,0000*60
|
||||
$PTNL,GGK,235658.00,122017,3403.47147835,N,11711.80852392,W,4,10,2.5,EHT371.050,M*67
|
||||
$GNGLL,3403.47147835,N,11711.80852392,W,235658.00,A,D*6C
|
||||
$GNGNS,235658.00,3403.47147835,N,11711.80852392,W,DDNNN,10,1.3,403.183,-32.133,,*2B
|
||||
$GPGNS,235658.00,,,,,,6,,,,2.0,0*46
|
||||
$GLGNS,235658.00,,,,,,4,,,,2.0,0*58
|
||||
$GNGSA,A,3,3,7,16,23,9,26,,,,,,,2.5,1.3,2.2*16
|
||||
$GNGSA,A,3,71,72,73,74,,,,,,,,,2.5,1.3,2.2*2D
|
||||
$GNGST,235658.00,0.079,0.577,0.429,131.2,0.499,0.518,1.219*40
|
||||
$GPGSV,4,1,14,26,33,050,46,9,40,314,46,3,54,187,46,23,68,354,47*73
|
||||
$GPGSV,4,2,14,16,56,082,48,7,28,256,36,6,8,295,30*72
|
||||
$GLGSV,4,3,14,73,52,022,45,74,62,248,49,72,44,331,41,71,78,111,50*6D
|
||||
$GAGSV,4,4,14,19,82,349,39,1,44,220,37,4,24,314,37*5E
|
||||
$GNRMC,235658.00,A,3403.47147835,N,11711.80852392,W,0.899,93.058,201217,12.0194,E,D*07
|
||||
$GNVTG,93.06,T,81.03,M,0.90,N,1.67,K,D*37
|
||||
$GNZDA,235658.04,20,12,2017,00,00*76
|
||||
$GNGGA,235659.00,3403.47147018,N,11711.80816037,W,2,10,1.1,402.866,M,-32.133,M,1.0,0000*68
|
||||
$PTNL,GGK,235659.00,122017,3403.47147018,N,11711.80816037,W,4,10,2.5,EHT370.734,M*69
|
||||
$GNGLL,3403.47147018,N,11711.80816037,W,235659.00,A,D*66
|
||||
$GNGNS,235659.00,3403.47147018,N,11711.80816037,W,DDNNN,10,1.1,402.866,-32.133,,*20
|
||||
$GPGNS,235659.00,,,,,,6,,,,1.0,0*44
|
||||
$GLGNS,235659.00,,,,,,4,,,,1.0,0*5A
|
||||
$GNGSA,A,3,3,7,16,23,9,26,,,,,,,2.5,1.1,2.2*14
|
||||
$GNGSA,A,3,71,72,73,74,,,,,,,,,2.5,1.1,2.2*2F
|
||||
$GNGST,235659.00,0.288,0.576,0.483,86.2,0.484,0.575,1.655*7A
|
||||
$GPGSV,4,1,14,26,33,050,32,9,40,314,48,3,54,187,46,23,68,354,47*7E
|
||||
$GPGSV,4,2,14,16,56,082,49,7,28,256,41,6,8,295,32*71
|
||||
$GLGSV,4,3,14,73,52,022,45,74,62,248,48,72,44,331,45,71,78,111,50*68
|
||||
$GAGSV,4,4,14,19,82,349,41,1,44,220,42,4,24,314,39*5D
|
||||
$GNRMC,235659.00,A,3403.47147018,N,11711.80816037,W,1.188,94.957,201217,12.0184,E,D*05
|
||||
$GNVTG,94.96,T,82.93,M,1.19,N,2.20,K,D*33
|
||||
$GNZDA,235659.05,20,12,2017,00,00*76
|
||||
$GNGGA,235700.00,3403.47149015,N,11711.80782461,W,2,10,1.5,402.571,M,-32.133,M,2.0,0000*6F
|
||||
$PTNL,GGK,235700.00,122017,3403.47149015,N,11711.80782461,W,4,10,3.6,EHT370.438,M*6F
|
||||
$GNGLL,3403.47149015,N,11711.80782461,W,235700.00,A,D*6D
|
||||
$GNGNS,235700.00,3403.47149015,N,11711.80782461,W,DDNNN,10,1.5,402.571,-32.133,,*24
|
||||
$GPGNS,235700.00,,,,,,6,,,,2.0,0*4A
|
||||
$GLGNS,235700.00,,,,,,4,,,,2.0,0*54
|
||||
$GNGSA,A,3,3,7,16,23,9,26,,,,,,,3.6,1.5,3.2*13
|
||||
$GNGSA,A,3,71,72,73,74,,,,,,,,,3.6,1.5,3.2*28
|
||||
$GNGST,235700.00,0.117,0.777,0.549,132.0,0.661,0.684,3.716*4A
|
||||
$GPGSV,4,1,14,26,33,050,42,9,40,314,45,3,54,187,45,23,68,354,49*79
|
||||
$GPGSV,4,2,14,16,56,082,48,7,28,256,36,6,8,295,28*7B
|
||||
$GLGSV,4,3,14,73,52,022,36,74,62,248,48,72,44,331,43,71,78,111,50*6A
|
||||
$GAGSV,4,4,14,19,82,349,43,1,44,220,39,4,24,314,38*52
|
||||
$GNRMC,235700.00,A,3403.47149015,N,11711.80782461,W,0.876,76.350,201217,12.0184,E,D*06
|
||||
$GNVTG,76.35,T,64.33,M,0.88,N,1.62,K,D*38
|
||||
$GNZDA,235700.05,20,12,2017,00,00*7B
|
||||
$GNGGA,235701.00,3403.47148265,N,11711.80745363,W,2,10,1.1,402.097,M,-32.133,M,1.0,0000*6E
|
||||
$PTNL,GGK,235701.00,122017,3403.47148265,N,11711.80745363,W,4,10,2.5,EHT369.965,M*6B
|
||||
$GNGLL,3403.47148265,N,11711.80745363,W,235701.00,A,D*66
|
||||
$GNGNS,235701.00,3403.47148265,N,11711.80745363,W,DDNNN,10,1.1,402.097,-32.133,,*26
|
||||
$GPGNS,235701.00,,,,,,6,,,,1.0,0*48
|
||||
$GLGNS,235701.00,,,,,,4,,,,1.0,0*56
|
||||
$GNGSA,A,3,3,7,16,23,9,26,,,,,,,2.5,1.1,2.2*14
|
||||
$GNGSA,A,3,71,72,73,74,,,,,,,,,2.5,1.1,2.2*2F
|
||||
$GNGST,235701.00,0.405,0.649,0.466,115.2,0.504,0.620,1.590*4A
|
||||
$GPGSV,4,1,14,26,33,050,44,9,40,314,42,3,54,187,43,23,68,354,47*70
|
||||
$GPGSV,4,2,14,16,56,082,50,7,28,256,39,6,8,295,33*77
|
||||
$GLGSV,4,3,14,73,52,022,46,74,62,248,47,72,44,331,41,71,78,111,50*60
|
||||
$GAGSV,4,4,14,19,82,349,41,1,44,220,38,4,24,314,38*51
|
||||
$GNRMC,235701.00,A,3403.47148265,N,11711.80745363,W,1.270,89.127,201217,12.0184,E,D*02
|
||||
$GNVTG,89.13,T,77.10,M,1.27,N,2.35,K,D*3A
|
||||
$GNZDA,235701.04,20,12,2017,00,00*7B
|
||||
$GNGGA,235702.00,3403.47209507,N,11711.80732370,W,5,05,2.6,407.505,M,-32.133,M,1.0,0000*66
|
||||
$PTNL,GGK,235702.00,122017,3403.47209507,N,11711.80732370,W,2,05,13.5,EHT375.372,M*5C
|
||||
$GNGLL,3403.47209507,N,11711.80732370,W,235702.00,A,D*62
|
||||
$GNGNS,235702.00,3403.47209507,N,11711.80732370,W,FFNNN,05,2.6,407.505,-32.133,,*29
|
||||
$GPGNS,235702.00,,,,,,3,,,,1.0,0*4E
|
||||
$GLGNS,235702.00,,,,,,2,,,,1.0,0*53
|
||||
$GNGSA,A,3,3,23,16,,,,,,,,,,13.5,2.6,13.2*1A
|
||||
$GNGSA,A,3,74,71,,,,,,,,,,,13.5,2.6,13.2*2A
|
||||
$GNGST,235702.00,0.191,0.676,0.301,57.6,0.442,0.593,2.529*71
|
||||
$GPGSV,4,1,14,26,33,050,43,9,40,314,48,3,54,187,43,23,68,354,47*7D
|
||||
$GPGSV,4,2,14,16,56,082,48,7,28,256,44,6,8,295,32*75
|
||||
$GLGSV,4,3,14,73,52,022,45,74,62,248,48,72,44,331,43,71,78,111,48*67
|
||||
$GAGSV,4,4,14,19,82,349,42,1,44,220,31,4,24,314,38*5B
|
||||
$GNRMC,235702.00,A,3403.47209507,N,11711.80732370,W,1.789,123.975,201217,12.0184,E,D*3B
|
||||
$GNVTG,123.97,T,111.95,M,1.79,N,3.31,K,D*35
|
||||
$GNZDA,235702.05,20,12,2017,00,00*79
|
||||
$GNGGA,235703.00,3403.47120029,N,11711.80679221,W,2,10,1.1,401.881,M,-32.133,M,1.0,0000*6D
|
||||
$PTNL,GGK,235703.00,122017,3403.47120029,N,11711.80679221,W,4,10,2.5,EHT369.748,M*65
|
||||
$GNGLL,3403.47120029,N,11711.80679221,W,235703.00,A,D*69
|
||||
$GNGNS,235703.00,3403.47120029,N,11711.80679221,W,DDNNN,10,1.1,401.881,-32.133,,*25
|
||||
$GPGNS,235703.00,,,,,,6,,,,1.0,0*4A
|
||||
$GLGNS,235703.00,,,,,,4,,,,1.0,0*54
|
||||
$GNGSA,A,3,3,7,16,23,9,26,,,,,,,2.5,1.1,2.2*14
|
||||
$GNGSA,A,3,71,72,73,74,,,,,,,,,2.5,1.1,2.2*2F
|
||||
$GNGST,235703.00,0.172,0.571,0.507,130.8,0.535,0.545,1.547*46
|
||||
$GPGSV,4,1,14,26,33,050,48,9,40,314,48,3,54,187,40,23,68,354,49*7B
|
||||
$GPGSV,4,2,14,16,56,082,50,7,28,256,48,6,8,295,36*74
|
||||
$GLGSV,4,3,14,73,52,022,48,74,62,248,51,72,44,331,36,71,78,111,48*60
|
||||
$GAGSV,4,4,14,19,82,349,42,1,44,220,28,4,24,314,35*5E
|
||||
$GNRMC,235703.00,A,3403.47120029,N,11711.80679221,W,0.436,232.424,201217,12.0184,E,D*3C
|
||||
$GNVTG,232.42,T,220.40,M,0.44,N,0.81,K,D*30
|
||||
$GNZDA,235703.04,20,12,2017,00,00*79
|
||||
$GNGGA,235704.00,3403.47119518,N,11711.80687769,W,2,10,1.1,401.570,M,-32.133,M,1.0,0000*6C
|
||||
$PTNL,GGK,235704.00,122017,3403.47119518,N,11711.80687769,W,4,10,2.5,EHT369.437,M*6C
|
||||
$GNGLL,3403.47119518,N,11711.80687769,W,235704.00,A,D*6B
|
||||
$GNGNS,235704.00,3403.47119518,N,11711.80687769,W,DDNNN,10,1.1,401.570,-32.133,,*24
|
||||
$GPGNS,235704.00,,,,,,6,,,,1.0,0*4D
|
||||
$GLGNS,235704.00,,,,,,4,,,,1.0,0*53
|
||||
$GNGSA,A,3,3,7,16,23,9,26,,,,,,,2.5,1.1,2.2*14
|
||||
$GNGSA,A,3,71,72,73,74,,,,,,,,,2.5,1.1,2.2*2F
|
||||
$GNGST,235704.00,0.081,0.482,0.452,79.3,0.453,0.481,1.300*7A
|
||||
$GPGSV,4,1,14,26,33,050,42,9,40,314,47,3,54,187,42,23,68,354,48*7D
|
||||
$GPGSV,4,2,14,16,56,082,48,7,28,256,48,6,8,295,30*7B
|
||||
$GLGSV,4,3,14,73,52,022,46,74,62,248,50,72,44,331,40,71,78,111,52*65
|
||||
$GAGSV,4,4,14,19,82,349,44,1,45,220,27,4,24,314,39*5A
|
||||
$GNRMC,235704.00,A,3403.47119518,N,11711.80687769,W,0.652,217.080,201217,12.0184,E,D*33
|
||||
$GNVTG,217.08,T,205.06,M,0.65,N,1.21,K,D*34
|
||||
$GNZDA,235704.04,20,12,2017,00,00*7E
|
||||
$GNGGA,235705.00,3403.47106821,N,11711.80682894,W,2,10,1.1,401.365,M,-32.133,M,1.0,0000*6E
|
||||
$PTNL,GGK,235705.00,122017,3403.47106821,N,11711.80682894,W,4,10,2.5,EHT369.233,M*6E
|
||||
$GNGLL,3403.47106821,N,11711.80682894,W,235705.00,A,D*6B
|
||||
$GNGNS,235705.00,3403.47106821,N,11711.80682894,W,DDNNN,10,1.1,401.365,-32.133,,*26
|
||||
$GPGNS,235705.00,,,,,,6,,,,1.0,0*4C
|
||||
$GLGNS,235705.00,,,,,,4,,,,1.0,0*52
|
||||
$GNGSA,A,3,3,7,16,23,9,26,,,,,,,2.5,1.1,2.2*14
|
||||
$GNGSA,A,3,71,72,73,74,,,,,,,,,2.5,1.1,2.2*2F
|
||||
$GNGST,235705.00,0.184,0.604,0.511,110.3,0.523,0.594,2.302*49
|
||||
$GPGSV,4,1,14,26,33,050,43,9,40,314,46,3,54,187,36,23,68,354,49*7F
|
||||
$GPGSV,4,2,14,16,56,082,46,7,28,256,49,6,8,295,29*7C
|
||||
$GLGSV,4,3,14,73,52,022,48,74,62,248,48,72,44,331,45,71,78,111,49*6D
|
||||
$GAGSV,4,4,14,19,82,349,45,1,45,220,,4,24,314,36*51
|
||||
$GNRMC,235705.00,A,3403.47106821,N,11711.80682894,W,0.302,182.019,201217,12.0184,E,D*3C
|
||||
$GNVTG,182.02,T,170.00,M,0.30,N,0.56,K,D*37
|
||||
$GNZDA,235705.04,20,12,2017,00,00*7F
|
||||
$GNGGA,235706.00,3403.47081686,N,11711.80716414,W,2,10,1.1,401.142,M,-32.133,M,1.0,0000*6F
|
||||
$PTNL,GGK,235706.00,122017,3403.47081686,N,11711.80716414,W,4,10,2.5,EHT369.009,M*63
|
||||
$GNGLL,3403.47081686,N,11711.80716414,W,235706.00,A,D*6D
|
||||
$GNGNS,235706.00,3403.47081686,N,11711.80716414,W,DDNNN,10,1.1,401.142,-32.133,,*27
|
||||
$GPGNS,235706.00,,,,,,6,,,,1.0,0*4F
|
||||
$GLGNS,235706.00,,,,,,4,,,,1.0,0*51
|
||||
$GNGSA,A,3,3,7,16,23,9,26,,,,,,,2.5,1.1,2.2*14
|
||||
$GNGSA,A,3,71,72,73,74,,,,,,,,,2.5,1.1,2.2*2F
|
||||
$GNGST,235706.00,0.507,1.290,0.568,8.9,1.278,0.595,2.251*4F
|
||||
$GPGSV,4,1,14,26,33,050,39,9,40,314,47,3,54,187,27,23,68,354,48*72
|
||||
$GPGSV,4,2,14,16,56,082,49,7,28,256,44,6,8,295,31*77
|
||||
$GLGSV,4,3,14,73,52,022,46,74,62,248,52,72,44,331,43,71,78,111,50*66
|
||||
$GAGSV,4,4,14,19,82,349,45,1,45,220,,4,24,314,42*52
|
||||
$GNRMC,235706.00,A,3403.47081686,N,11711.80716414,W,1.987,230.087,201217,12.0184,E,D*31
|
||||
$GNVTG,230.09,T,218.06,M,1.99,N,3.68,K,D*31
|
||||
$GNZDA,235706.04,20,12,2017,00,00*7C
|
||||
$GNGGA,235707.00,3403.47081722,N,11711.80761938,W,2,10,1.1,401.175,M,-32.133,M,1.0,0000*66
|
||||
$PTNL,GGK,235707.00,122017,3403.47081722,N,11711.80761938,W,4,10,2.5,EHT369.042,M*61
|
||||
$GNGLL,3403.47081722,N,11711.80761938,W,235707.00,A,D*60
|
||||
$GNGNS,235707.00,3403.47081722,N,11711.80761938,W,DDNNN,10,1.1,401.175,-32.133,,*2E
|
||||
$GPGNS,235707.00,,,,,,6,,,,1.0,0*4E
|
||||
$GLGNS,235707.00,,,,,,4,,,,1.0,0*50
|
||||
$GNGSA,A,3,3,7,16,23,9,26,,,,,,,2.5,1.1,2.2*14
|
||||
$GNGSA,A,3,71,72,73,74,,,,,,,,,2.5,1.1,2.2*2F
|
||||
$GNGST,235707.00,0.344,0.696,0.431,0.2,0.696,0.431,1.028*47
|
||||
$GPGSV,4,1,14,26,33,050,41,9,40,314,51,3,54,187,26,23,68,354,53*71
|
||||
$GPGSV,4,2,14,16,56,082,47,7,28,256,41,6,8,295,33*7E
|
||||
$GLGSV,4,3,14,73,52,022,49,74,62,248,50,72,44,331,45,71,78,111,49*65
|
||||
$GAGSV,4,4,14,19,82,349,44,1,45,220,,4,24,314,40*51
|
||||
$GNRMC,235707.00,A,3403.47081722,N,11711.80761938,W,0.761,260.972,201217,12.0184,E,D*3D
|
||||
$GNVTG,260.97,T,248.95,M,0.76,N,1.41,K,D*35
|
||||
$GNZDA,235707.04,20,12,2017,00,00*7D
|
||||
$GNGGA,235708.00,3403.47103245,N,11711.80785783,W,2,10,1.1,400.346,M,-32.133,M,1.0,0000*61
|
||||
$PTNL,GGK,235708.00,122017,3403.47103245,N,11711.80785783,W,4,10,2.5,EHT368.213,M*62
|
||||
$GNGLL,3403.47103245,N,11711.80785783,W,235708.00,A,D*64
|
||||
$GNGNS,235708.00,3403.47103245,N,11711.80785783,W,DDNNN,10,1.1,400.346,-32.133,,*29
|
||||
$GPGNS,235708.00,,,,,,6,,,,1.0,0*41
|
||||
$GLGNS,235708.00,,,,,,4,,,,1.0,0*5F
|
||||
$GNGSA,A,3,3,7,16,23,9,26,,,,,,,2.5,1.1,2.2*14
|
||||
$GNGSA,A,3,71,72,73,74,,,,,,,,,2.5,1.1,2.2*2F
|
||||
$GNGST,235708.00,0.403,1.848,0.759,95.0,0.773,1.842,3.363*7E
|
||||
$GPGSV,4,1,14,26,33,050,39,9,40,314,49,3,54,187,29,23,68,354,50*7B
|
||||
$GPGSV,4,2,14,16,56,082,43,7,28,256,40,6,8,295,27*7E
|
||||
$GLGSV,4,3,14,73,52,022,42,74,62,248,51,72,44,331,48,71,78,111,48*63
|
||||
$GAGSV,4,4,14,19,82,349,45,1,45,220,,4,24,314,40*50
|
||||
$GNRMC,235708.00,A,3403.47103245,N,11711.80785783,W,0.499,282.930,201217,12.0184,E,D*37
|
||||
$GNVTG,282.93,T,270.91,M,0.50,N,0.92,K,D*39
|
||||
$GNZDA,235708.04,20,12,2017,00,00*72
|
||||
$GNGGA,235709.00,3403.47114843,N,11711.80761413,W,2,10,1.1,400.362,M,-32.133,M,1.0,0000*6C
|
||||
$PTNL,GGK,235709.00,122017,3403.47114843,N,11711.80761413,W,4,10,2.5,EHT368.229,M*60
|
||||
$GNGLL,3403.47114843,N,11711.80761413,W,235709.00,A,D*6F
|
||||
$GNGNS,235709.00,3403.47114843,N,11711.80761413,W,DDNNN,10,1.1,400.362,-32.133,,*24
|
||||
$GPGNS,235709.00,,,,,,6,,,,1.0,0*40
|
||||
$GLGNS,235709.00,,,,,,4,,,,1.0,0*5E
|
||||
$GNGSA,A,3,3,7,16,23,9,26,,,,,,,2.5,1.1,2.2*14
|
||||
$GNGSA,A,3,71,72,73,74,,,,,,,,,2.5,1.1,2.2*2F
|
||||
$GNGST,235709.00,0.772,1.495,1.358,166.5,1.487,1.366,2.879*4F
|
||||
$GPGSV,4,1,14,26,33,050,43,9,40,314,48,3,54,187,23,23,68,354,52*7F
|
||||
$GPGSV,4,2,14,16,56,082,48,7,28,256,39,6,8,295,29*75
|
||||
$GLGSV,4,3,14,73,52,022,46,74,62,248,51,72,44,331,43,71,78,111,48*6C
|
||||
$GAGSV,4,4,14,19,82,349,44,1,45,220,,4,24,314,30*56
|
||||
$GNRMC,235709.00,A,3403.47114843,N,11711.80761413,W,2.000,64.782,201217,12.0184,E,D*07
|
||||
$GNVTG,64.78,T,52.76,M,2.00,N,3.70,K,D*35
|
||||
$GNZDA,235709.04,20,12,2017,00,00*73
|
||||
$GNGGA,235710.00,3403.47131526,N,11711.80702946,W,2,10,1.1,400.482,M,-32.133,M,2.0,0000*6F
|
||||
$PTNL,GGK,235710.00,122017,3403.47131526,N,11711.80702946,W,4,10,2.5,EHT368.349,M*6E
|
||||
$GNGLL,3403.47131526,N,11711.80702946,W,235710.00,A,D*66
|
||||
$GNGNS,235710.00,3403.47131526,N,11711.80702946,W,DDNNN,10,1.1,400.482,-32.133,,*24
|
||||
$GPGNS,235710.00,,,,,,6,,,,2.0,0*4B
|
||||
$GLGNS,235710.00,,,,,,4,,,,2.0,0*55
|
||||
$GNGSA,A,3,3,7,16,23,9,26,,,,,,,2.5,1.1,2.2*14
|
||||
$GNGSA,A,3,71,72,73,74,,,,,,,,,2.5,1.1,2.2*2F
|
||||
$GNGST,235710.00,0.559,1.831,1.191,125.0,1.433,1.648,2.840*47
|
||||
$GPGSV,4,1,14,26,33,050,43,9,40,314,47,3,54,187,32,23,68,354,51*73
|
||||
$GPGSV,4,2,14,16,56,082,49,7,28,256,48,6,8,295,35*7F
|
||||
$GLGSV,4,3,14,73,52,022,48,74,62,248,49,72,44,331,40,71,78,111,52*63
|
||||
$GAGSV,4,4,14,19,82,349,46,1,45,220,,4,24,314,38*5C
|
||||
$GNRMC,235710.00,A,3403.47131526,N,11711.80702946,W,2.040,39.208,201217,12.0184,E,D*05
|
||||
$GNVTG,39.21,T,27.18,M,2.04,N,3.78,K,D*37
|
||||
$GNZDA,235710.04,20,12,2017,00,00*7B
|
||||
$GNGGA,235711.00,3403.47162424,N,11711.80748132,W,2,10,1.1,400.468,M,-32.133,M,1.0,0000*69
|
||||
$PTNL,GGK,235711.00,122017,3403.47162424,N,11711.80748132,W,4,10,2.5,EHT368.336,M*67
|
||||
$GNGLL,3403.47162424,N,11711.80748132,W,235711.00,A,D*67
|
||||
$GNGNS,235711.00,3403.47162424,N,11711.80748132,W,DDNNN,10,1.1,400.468,-32.133,,*21
|
||||
$GPGNS,235711.00,,,,,,6,,,,1.0,0*49
|
||||
$GLGNS,235711.00,,,,,,4,,,,1.0,0*57
|
||||
$GNGSA,A,3,3,7,16,23,9,26,,,,,,,2.5,1.1,2.2*14
|
||||
$GNGSA,A,3,71,72,73,74,,,,,,,,,2.5,1.1,2.2*2F
|
||||
$GNGST,235711.00,0.529,0.923,0.568,152.8,0.861,0.658,1.139*47
|
||||
$GPGSV,4,1,14,26,33,050,45,9,40,314,44,3,54,187,41,23,68,354,52*71
|
||||
$GPGSV,4,2,14,16,56,082,47,7,28,256,48,6,8,295,34*70
|
||||
$GLGSV,4,3,14,73,52,022,44,74,62,248,50,72,44,331,40,71,78,111,50*65
|
||||
$GAGSV,4,4,14,19,82,349,45,1,45,220,,4,24,314,41*51
|
||||
$GNRMC,235711.00,A,3403.47162424,N,11711.80748132,W,2.862,279.601,201217,12.0184,E,D*37
|
||||
$GNVTG,279.60,T,267.58,M,2.86,N,5.30,K,D*36
|
||||
$GNZDA,235711.04,20,12,2017,00,00*7A
|
||||
$GNGGA,235712.00,3403.47153718,N,11711.80785392,W,2,10,1.1,400.735,M,-32.133,M,1.0,0000*66
|
||||
$PTNL,GGK,235712.00,122017,3403.47153718,N,11711.80785392,W,4,10,2.5,EHT368.603,M*60
|
||||
$GNGLL,3403.47153718,N,11711.80785392,W,235712.00,A,D*63
|
||||
$GNGNS,235712.00,3403.47153718,N,11711.80785392,W,DDNNN,10,1.1,400.735,-32.133,,*2E
|
||||
$GPGNS,235712.00,,,,,,6,,,,1.0,0*4A
|
||||
$GLGNS,235712.00,,,,,,4,,,,1.0,0*54
|
||||
$GNGSA,A,3,3,7,16,23,9,26,,,,,,,2.5,1.1,2.2*14
|
||||
$GNGSA,A,3,71,72,73,74,,,,,,,,,2.5,1.1,2.2*2F
|
||||
$GNGST,235712.00,0.330,1.096,0.718,13.9,1.078,0.746,2.498*7E
|
||||
$GPGSV,4,1,14,26,33,050,43,9,40,314,44,3,54,187,37,23,68,354,47*72
|
||||
$GPGSV,4,2,14,16,56,082,46,7,28,256,45,6,8,295,31*79
|
||||
$GLGSV,4,3,14,73,52,023,46,74,62,248,49,72,44,331,47,71,78,112,48*63
|
||||
$GAGSV,4,4,14,19,82,349,44,1,45,220,,4,24,315,31*56
|
||||
$GNRMC,235712.00,A,3403.47153718,N,11711.80785392,W,1.009,242.798,201217,12.0184,E,D*3C
|
||||
$GNVTG,242.80,T,230.77,M,1.01,N,1.87,K,D*3B
|
||||
$GNZDA,235712.04,20,12,2017,00,00*79
|
||||
$GNGGA,235713.00,3403.47143216,N,11711.80816564,W,2,10,1.4,401.049,M,-32.133,M,1.0,0000*6F
|
||||
$PTNL,GGK,235713.00,122017,3403.47143216,N,11711.80816564,W,4,10,2.6,EHT368.916,M*69
|
||||
$GNGLL,3403.47143216,N,11711.80816564,W,235713.00,A,D*62
|
||||
$GNGNS,235713.00,3403.47143216,N,11711.80816564,W,DDNNN,10,1.4,401.049,-32.133,,*27
|
||||
$GPGNS,235713.00,,,,,,6,,,,1.0,0*4B
|
||||
$GLGNS,235713.00,,,,,,4,,,,1.0,0*55
|
||||
$GNGSA,A,3,3,7,16,23,9,26,,,,,,,2.6,1.4,2.2*12
|
||||
$GNGSA,A,3,71,72,73,74,,,,,,,,,2.6,1.4,2.2*29
|
||||
$GNGST,235713.00,0.224,1.291,0.567,6.3,1.284,0.581,2.139*4C
|
||||
$GPGSV,4,1,14,26,33,050,35,9,40,314,39,3,54,187,42,23,68,354,49*75
|
||||
$GPGSV,4,2,14,16,56,082,42,7,28,256,48,6,8,295,34*75
|
||||
$GLGSV,4,3,14,73,52,023,46,74,62,248,52,72,44,331,44,71,78,112,47*65
|
||||
$GAGSV,4,4,14,19,82,349,43,1,45,220,37,4,24,315,36*52
|
||||
$GNRMC,235713.00,A,3403.47143216,N,11711.80816564,W,0.547,233.151,201217,12.0184,E,D*36
|
||||
$GNVTG,233.15,T,221.13,M,0.55,N,1.01,K,D*3D
|
||||
$GNZDA,235713.04,20,12,2017,00,00*78
|
||||
$GNGGA,235714.00,3403.47131369,N,11711.80847586,W,2,10,1.6,401.413,M,-32.133,M,1.0,0000*65
|
||||
$PTNL,GGK,235714.00,122017,3403.47131369,N,11711.80847586,W,4,10,3.6,EHT369.280,M*6E
|
||||
$GNGLL,3403.47131369,N,11711.80847586,W,235714.00,A,D*61
|
||||
$GNGNS,235714.00,3403.47131369,N,11711.80847586,W,DDNNN,10,1.6,401.413,-32.133,,*2D
|
||||
$GPGNS,235714.00,,,,,,6,,,,1.0,0*4C
|
||||
$GLGNS,235714.00,,,,,,4,,,,1.0,0*52
|
||||
$GNGSA,A,3,3,7,16,23,9,26,,,,,,,3.6,1.6,3.2*10
|
||||
$GNGSA,A,3,71,72,73,74,,,,,,,,,3.6,1.6,3.2*2B
|
||||
$GNGST,235714.00,0.019,1.196,0.567,7.1,1.189,0.582,2.045*47
|
||||
$GPGSV,4,1,14,26,33,050,42,9,40,314,41,3,54,187,44,23,68,354,51*75
|
||||
$GPGSV,4,2,14,16,56,082,42,7,28,256,48,6,8,295,24*74
|
||||
$GLGSV,4,3,14,73,52,023,46,74,62,248,53,72,44,331,48,71,78,112,49*66
|
||||
$GAGSV,4,4,14,19,82,349,43,1,45,220,39,4,24,315,31*5B
|
||||
$GNRMC,235714.00,A,3403.47131369,N,11711.80847586,W,0.974,241.523,201217,12.0184,E,D*3D
|
||||
$GNVTG,241.52,T,229.50,M,0.97,N,1.80,K,D*33
|
||||
$GNZDA,235714.04,20,12,2017,00,00*7F
|
||||
$GNGGA,235715.00,3403.47121040,N,11711.80878910,W,2,10,1.6,401.771,M,-32.133,M,2.0,0000*66
|
||||
$PTNL,GGK,235715.00,122017,3403.47121040,N,11711.80878910,W,4,10,3.6,EHT369.639,M*6F
|
||||
$GNGLL,3403.47121040,N,11711.80878910,W,235715.00,A,D*66
|
||||
$GNGNS,235715.00,3403.47121040,N,11711.80878910,W,DDNNN,10,1.6,401.771,-32.133,,*2D
|
||||
$GPGNS,235715.00,,,,,,6,,,,2.0,0*4E
|
||||
$GLGNS,235715.00,,,,,,4,,,,2.0,0*50
|
||||
$GNGSA,A,3,3,7,16,23,9,26,,,,,,,3.6,1.6,3.2*10
|
||||
$GNGSA,A,3,71,72,73,74,,,,,,,,,3.6,1.6,3.2*2B
|
||||
$GNGST,235715.00,0.009,0.851,0.519,15.6,0.831,0.550,1.657*7B
|
||||
$GPGSV,4,1,14,26,33,050,41,9,40,314,47,3,54,187,44,23,68,354,49*79
|
||||
$GPGSV,4,2,14,16,56,082,46,7,28,256,46,6,8,295,24*7E
|
||||
$GLGSV,4,3,14,73,52,023,46,74,62,248,52,72,44,331,43,71,78,112,50*64
|
||||
$GAGSV,4,4,14,19,82,349,42,1,45,220,37,4,24,315,35*50
|
||||
$GNRMC,235715.00,A,3403.47121040,N,11711.80878910,W,0.867,245.712,201217,12.0184,E,D*3D
|
||||
$GNVTG,245.71,T,233.69,M,0.87,N,1.61,K,D*39
|
||||
$GNZDA,235715.04,20,12,2017,00,00*7E
|
||||
$GNGGA,235716.00,3403.47123240,N,11711.80919545,W,2,10,1.4,402.394,M,-32.133,M,1.0,0000*62
|
||||
$PTNL,GGK,235716.00,122017,3403.47123240,N,11711.80919545,W,4,10,2.6,EHT370.261,M*66
|
||||
$GNGLL,3403.47123240,N,11711.80919545,W,235716.00,A,D*6F
|
||||
$GNGNS,235716.00,3403.47123240,N,11711.80919545,W,DDNNN,10,1.4,402.394,-32.133,,*2A
|
||||
$GPGNS,235716.00,,,,,,6,,,,1.0,0*4E
|
||||
$GLGNS,235716.00,,,,,,4,,,,1.0,0*50
|
||||
$GNGSA,A,3,3,7,16,23,9,26,,,,,,,2.6,1.4,2.2*12
|
||||
$GNGSA,A,3,71,72,73,74,,,,,,,,,2.6,1.4,2.2*29
|
||||
$GNGST,235716.00,1.149,0.933,0.525,10.4,0.922,0.543,1.706*75
|
||||
$GPGSV,4,1,14,26,33,050,41,9,40,314,44,3,54,187,43,23,68,354,50*75
|
||||
$GPGSV,4,2,14,16,56,082,45,7,28,256,49,6,8,295,25*73
|
||||
$GLGSV,4,3,14,73,52,023,48,74,62,248,49,72,44,331,42,71,78,112,50*61
|
||||
$GAGSV,4,4,14,19,82,349,44,1,45,220,41,4,24,315,34*56
|
||||
$GNRMC,235716.00,A,3403.47123240,N,11711.80919545,W,1.041,279.693,201217,12.0184,E,D*3E
|
||||
$GNVTG,279.69,T,267.67,M,1.04,N,1.93,K,D*37
|
||||
$GNZDA,235716.04,20,12,2017,00,00*7D
|
||||
$GNGGA,235717.00,3403.47122464,N,11711.80959051,W,2,10,1.1,402.830,M,-32.133,M,1.0,0000*66
|
||||
$PTNL,GGK,235717.00,122017,3403.47122464,N,11711.80959051,W,4,10,2.5,EHT370.697,M*6C
|
||||
$GNGLL,3403.47122464,N,11711.80959051,W,235717.00,A,D*6B
|
||||
$GNGNS,235717.00,3403.47122464,N,11711.80959051,W,DDNNN,10,1.1,402.830,-32.133,,*2E
|
||||
$GPGNS,235717.00,,,,,,6,,,,1.0,0*4F
|
||||
$GLGNS,235717.00,,,,,,4,,,,1.0,0*51
|
||||
$GNGSA,A,3,3,7,16,23,9,26,,,,,,,2.5,1.1,2.2*14
|
||||
$GNGSA,A,3,71,72,73,74,,,,,,,,,2.5,1.1,2.2*2F
|
||||
$GNGST,235717.00,1.067,0.652,0.509,170.5,0.649,0.513,1.360*4A
|
||||
$GPGSV,4,1,14,26,33,050,39,9,40,314,44,3,54,187,42,23,68,354,49*73
|
||||
$GPGSV,4,2,14,16,56,082,46,7,28,256,48,6,8,295,36*73
|
||||
$GLGSV,4,3,14,73,52,023,47,74,62,248,50,72,44,331,43,71,78,112,49*6F
|
||||
$GAGSV,4,4,14,19,82,349,44,1,45,220,44,4,25,315,37*51
|
||||
$GNRMC,235717.00,A,3403.47122464,N,11711.80959051,W,1.097,253.709,201217,12.0184,E,D*3B
|
||||
$GNVTG,253.71,T,241.69,M,1.10,N,2.03,K,D*33
|
||||
$GNZDA,235717.04,20,12,2017,00,00*7C
|
||||
$GNGGA,235718.00,3403.47114250,N,11711.80972779,W,2,10,1.4,402.377,M,-32.133,M,2.0,0000*67
|
||||
$PTNL,GGK,235718.00,122017,3403.47114250,N,11711.80972779,W,4,10,3.5,EHT370.245,M*69
|
||||
$GNGLL,3403.47114250,N,11711.80972779,W,235718.00,A,D*64
|
||||
$GNGNS,235718.00,3403.47114250,N,11711.80972779,W,DDNNN,10,1.4,402.377,-32.133,,*2C
|
||||
$GPGNS,235718.00,,,,,,6,,,,2.0,0*43
|
||||
$GLGNS,235718.00,,,,,,4,,,,2.0,0*5D
|
||||
$GNGSA,A,3,3,7,16,23,9,26,,,,,,,3.5,1.4,3.2*11
|
||||
$GNGSA,A,3,71,72,73,74,,,,,,,,,3.5,1.4,3.2*2A
|
||||
$GNGST,235718.00,0.129,0.560,0.528,152.7,0.554,0.535,1.455*46
|
||||
$GPGSV,4,1,14,26,33,050,38,9,40,314,47,3,54,187,41,23,68,354,47*7C
|
||||
$GPGSV,4,2,14,16,56,082,47,7,28,256,48,6,8,295,38*7C
|
||||
$GLGSV,4,3,14,73,52,023,48,74,62,248,49,72,44,331,47,71,78,112,50*64
|
||||
$GAGSV,4,4,14,19,82,349,43,1,45,220,42,4,25,315,42*52
|
||||
$GNRMC,235718.00,A,3403.47114250,N,11711.80972779,W,1.874,197.563,201217,12.0184,E,D*34
|
||||
$GNVTG,197.56,T,185.54,M,1.87,N,3.47,K,D*37
|
||||
$GNZDA,235718.04,20,12,2017,00,00*73
|
||||
$GNGGA,235719.00,3403.47068778,N,11711.80950154,W,2,10,1.4,402.411,M,-32.133,M,1.0,0000*6E
|
||||
$PTNL,GGK,235719.00,122017,3403.47068778,N,11711.80950154,W,4,10,3.5,EHT370.278,M*6A
|
||||
$GNGLL,3403.47068778,N,11711.80950154,W,235719.00,A,D*69
|
||||
$GNGNS,235719.00,3403.47068778,N,11711.80950154,W,DDNNN,10,1.4,402.411,-32.133,,*26
|
||||
$GPGNS,235719.00,,,,,,6,,,,1.0,0*41
|
||||
$GLGNS,235719.00,,,,,,4,,,,1.0,0*5F
|
||||
$GNGSA,A,3,3,7,16,23,9,26,,,,,,,3.5,1.4,3.2*11
|
||||
$GNGSA,A,3,71,72,73,74,,,,,,,,,3.5,1.4,3.2*2A
|
||||
$GNGST,235719.00,0.145,1.154,0.540,7.5,1.146,0.556,2.034*41
|
||||
$GPGSV,4,1,14,26,33,050,45,9,40,314,42,3,54,187,33,23,68,354,46*77
|
||||
$GPGSV,4,2,14,16,56,082,48,7,28,256,50,6,8,295,34*76
|
||||
$GLGSV,4,3,14,73,52,023,48,74,62,248,51,72,44,331,41,71,78,112,48*62
|
||||
$GAGSV,4,4,14,19,82,349,42,1,45,220,28,4,25,315,32*58
|
||||
$GNRMC,235719.00,A,3403.47068778,N,11711.80950154,W,2.065,154.675,201217,12.0184,E,D*39
|
||||
$GNVTG,154.67,T,142.65,M,2.06,N,3.82,K,D*30
|
||||
$GNZDA,235719.04,20,12,2017,00,00*72
|
||||
$GNGGA,235720.00,3403.47007871,N,11711.80931237,W,2,10,1.4,402.401,M,-32.133,M,2.0,0000*68
|
||||
$PTNL,GGK,235720.00,122017,3403.47007871,N,11711.80931237,W,4,10,3.5,EHT370.269,M*6E
|
||||
$GNGLL,3403.47007871,N,11711.80931237,W,235720.00,A,D*6D
|
||||
$GNGNS,235720.00,3403.47007871,N,11711.80931237,W,DDNNN,10,1.4,402.401,-32.133,,*23
|
||||
$GPGNS,235720.00,,,,,,6,,,,2.0,0*48
|
||||
$GLGNS,235720.00,,,,,,4,,,,2.0,0*56
|
||||
$GNGSA,A,3,3,7,16,23,9,26,,,,,,,3.5,1.4,3.2*11
|
||||
$GNGSA,A,3,71,72,73,74,,,,,,,,,3.5,1.4,3.2*2A
|
||||
$GNGST,235720.00,0.094,1.479,0.673,24.1,1.379,0.861,3.056*78
|
||||
$GPGSV,4,1,14,26,33,050,45,9,40,314,41,3,54,187,26,23,68,354,49*7F
|
||||
$GPGSV,4,2,14,16,56,082,50,7,28,256,37,6,8,295,33*79
|
||||
$GLGSV,4,3,14,73,52,023,47,74,62,248,37,72,44,331,35,71,78,112,44*62
|
||||
$GAGSV,4,4,14,19,82,349,40,1,45,220,,4,25,315,33*51
|
||||
$GNRMC,235720.00,A,3403.47007871,N,11711.80931237,W,1.554,172.732,201217,12.0184,E,D*3F
|
||||
$GNVTG,172.73,T,160.71,M,1.55,N,2.88,K,D*3A
|
||||
$GNZDA,235720.04,20,12,2017,00,00*78
|
||||
|
|
@ -0,0 +1,75 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="C:\GitHub\dotMorten\NmeaParser\src\packages\MSTest.TestAdapter.1.2.0\build\net45\MSTest.TestAdapter.props" Condition="Exists('C:\GitHub\dotMorten\NmeaParser\src\packages\MSTest.TestAdapter.1.2.0\build\net45\MSTest.TestAdapter.props')" />
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProjectGuid>{170EE734-37F0-425F-822B-B865348ECEC6}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>NmeaParser.Tests.NET45</RootNamespace>
|
||||
<AssemblyName>NmeaParser.Tests.NET45</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
|
||||
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">15.0</VisualStudioVersion>
|
||||
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
|
||||
<ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\$(VisualStudioVersion)\UITestExtensionPackages</ReferencePath>
|
||||
<IsCodedUITest>False</IsCodedUITest>
|
||||
<TestProjectType>UnitTest</TestProjectType>
|
||||
<NuGetPackageImportStamp>
|
||||
</NuGetPackageImportStamp>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<RestoreProjectStyle>PackageReference</RestoreProjectStyle>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="MSTest.TestFramework">
|
||||
<Version>1.2.0</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="MSTest.TestAdapter">
|
||||
<Version>1.2.0</Version>
|
||||
</PackageReference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\NmeaParser\NmeaParser.csproj">
|
||||
<Project>{1adc3666-1ddb-48c4-9811-1e58b6d09a7c}</Project>
|
||||
<Name>NmeaParser</Name>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="..\..\NmeaSampleData.txt">
|
||||
<Link>NmeaSampleData.txt</Link>
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Include="..\..\TrimbleR2SampleData.txt">
|
||||
<Link>TrimbleR2SampleData.txt</Link>
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
<Import Project="..\NmeaParser.Tests\NmeaParser.Tests.projitems" Label="Shared" />
|
||||
<Import Project="$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets" Condition="Exists('$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets')" />
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
</Project>
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
[assembly: AssemblyTitle("NmeaParser.Tests.NET45")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("NmeaParser.Tests.NET45")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2017")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
[assembly: ComVisible(false)]
|
||||
|
||||
[assembly: Guid("170ee734-37f0-425f-822b-b865348ecec6")]
|
||||
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("1.0.0.0")]
|
||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
||||
|
|
@ -116,6 +116,9 @@
|
|||
<Content Include="..\..\NmeaSampleData.txt">
|
||||
<Link>NmeaSampleData.txt</Link>
|
||||
</Content>
|
||||
<Content Include="..\..\TrimbleR2SampleData.txt">
|
||||
<Link>TrimbleR2SampleData.txt</Link>
|
||||
</Content>
|
||||
<Content Include="Properties\UnitTestApp.rd.xml" />
|
||||
<Content Include="Assets\LockScreenLogo.scale-200.png" />
|
||||
<Content Include="Assets\SplashScreen.scale-200.png" />
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ using NmeaParser.Nmea.Gps;
|
|||
using System.Threading.Tasks;
|
||||
using System.IO;
|
||||
using NmeaParser.Nmea.Gnss;
|
||||
using NmeaParser.Nmea.Glonass;
|
||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||
|
||||
namespace NmeaParser.Tests
|
||||
|
|
@ -30,77 +31,109 @@ namespace NmeaParser.Tests
|
|||
[TestClass]
|
||||
public class NmeaMessages
|
||||
{
|
||||
[TestMethod]
|
||||
public async Task ParseNmeaFile()
|
||||
{
|
||||
var file = await Windows.Storage.StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///NmeaSampleData.txt"));
|
||||
System.IO.StreamReader reader = new System.IO.StreamReader(await file.OpenStreamForReadAsync());
|
||||
while(!reader.EndOfStream)
|
||||
{
|
||||
var line = reader.ReadLine();
|
||||
if (line.StartsWith("$"))
|
||||
{
|
||||
var msg = NmeaMessage.Parse(line);
|
||||
Assert.IsNotNull(msg);
|
||||
var idx = line.IndexOf('*');
|
||||
if (idx >= 0)
|
||||
{
|
||||
byte checksum = (byte)Convert.ToInt32(line.Substring(idx + 1), 16);
|
||||
Assert.AreEqual(checksum, msg.Checksum);
|
||||
}
|
||||
Assert.IsNotInstanceOfType(msg, typeof(Nmea.UnknownMessage), "Type " + msg.MessageType + " not supported");
|
||||
}
|
||||
}
|
||||
}
|
||||
[TestMethod]
|
||||
public async Task ParseNmeaFile()
|
||||
{
|
||||
#if NETFX_CORE
|
||||
var file = await Windows.Storage.StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///NmeaSampleData.txt"));
|
||||
System.IO.StreamReader reader = new System.IO.StreamReader(await file.OpenStreamForReadAsync());
|
||||
#else
|
||||
System.IO.StreamReader reader = new System.IO.StreamReader("NmeaSampleData.txt");
|
||||
#endif
|
||||
while (!reader.EndOfStream)
|
||||
{
|
||||
var line = reader.ReadLine();
|
||||
if (line.StartsWith("$"))
|
||||
{
|
||||
var msg = NmeaMessage.Parse(line);
|
||||
Assert.IsNotNull(msg);
|
||||
var idx = line.IndexOf('*');
|
||||
if (idx >= 0)
|
||||
{
|
||||
byte checksum = (byte)Convert.ToInt32(line.Substring(idx + 1), 16);
|
||||
Assert.AreEqual(checksum, msg.Checksum);
|
||||
}
|
||||
Assert.IsNotInstanceOfType(msg, typeof(Nmea.UnknownMessage), "Type " + msg.MessageType + " not supported");
|
||||
}
|
||||
}
|
||||
}
|
||||
[TestMethod]
|
||||
public async Task ParseTrimbleR2NmeaFile()
|
||||
{
|
||||
#if NETFX_CORE
|
||||
var file = await Windows.Storage.StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///TrimbleR2SampleData.txt"));
|
||||
System.IO.StreamReader reader = new System.IO.StreamReader(await file.OpenStreamForReadAsync());
|
||||
#else
|
||||
System.IO.StreamReader reader = new System.IO.StreamReader("TrimbleR2SampleData.txt");
|
||||
#endif
|
||||
while (!reader.EndOfStream)
|
||||
{
|
||||
var line = reader.ReadLine();
|
||||
if (line.StartsWith("$"))
|
||||
{
|
||||
var msg = NmeaMessage.Parse(line);
|
||||
Assert.IsNotNull(msg);
|
||||
var idx = line.IndexOf('*');
|
||||
if (idx >= 0)
|
||||
{
|
||||
byte checksum = (byte)Convert.ToInt32(line.Substring(idx + 1), 16);
|
||||
Assert.AreEqual(checksum, msg.Checksum);
|
||||
}
|
||||
if (msg.MessageType == "PTNL" || msg.MessageType == "GNVTG" || msg.MessageType == "GNZDA")
|
||||
continue; //TODO
|
||||
Assert.IsNotInstanceOfType(msg, typeof(Nmea.UnknownMessage), "Type " + msg.MessageType + " not supported");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void TestGprmb_Empty()
|
||||
{
|
||||
string input = "$GPRMB,A,,,,,,,,,,,,A,A*0B";
|
||||
var msg = NmeaMessage.Parse(input);
|
||||
Assert.IsInstanceOfType(msg, typeof(Gprmb));
|
||||
Gprmb rmb = (Gprmb)msg;
|
||||
Assert.AreEqual(true, rmb.Arrived);
|
||||
Assert.AreEqual(double.NaN, rmb.CrossTrackError);
|
||||
Assert.AreEqual(double.NaN, rmb.DestinationLatitude);
|
||||
Assert.AreEqual(double.NaN, rmb.DestinationLongitude);
|
||||
Assert.AreEqual(0, rmb.DestinationWaypointId);
|
||||
Assert.AreEqual(0, rmb.OriginWaypointId);
|
||||
Assert.AreEqual(double.NaN, rmb.RangeToDestination);
|
||||
Assert.AreEqual(Gprmb.DataStatus.Ok, rmb.Status);
|
||||
Assert.AreEqual(double.NaN, rmb.TrueBearing);
|
||||
Assert.AreEqual(double.NaN, rmb.Velocity);
|
||||
}
|
||||
[TestMethod]
|
||||
public void TestGprmb_Empty()
|
||||
{
|
||||
string input = "$GPRMB,A,,,,,,,,,,,,A,A*0B";
|
||||
var msg = NmeaMessage.Parse(input);
|
||||
Assert.IsInstanceOfType(msg, typeof(Gprmb));
|
||||
Gprmb rmb = (Gprmb)msg;
|
||||
Assert.AreEqual(true, rmb.Arrived);
|
||||
Assert.AreEqual(double.NaN, rmb.CrossTrackError);
|
||||
Assert.AreEqual(double.NaN, rmb.DestinationLatitude);
|
||||
Assert.AreEqual(double.NaN, rmb.DestinationLongitude);
|
||||
Assert.AreEqual(0, rmb.DestinationWaypointId);
|
||||
Assert.AreEqual(0, rmb.OriginWaypointId);
|
||||
Assert.AreEqual(double.NaN, rmb.RangeToDestination);
|
||||
Assert.AreEqual(Gprmb.DataStatus.Ok, rmb.Status);
|
||||
Assert.AreEqual(double.NaN, rmb.TrueBearing);
|
||||
Assert.AreEqual(double.NaN, rmb.Velocity);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void TestGprmb()
|
||||
{
|
||||
string input = "$GPRMB,A,0.66,L,003,004,4917.24,S,12309.57,W,001.3,052.5,000.5,V*3D";
|
||||
var msg = NmeaMessage.Parse(input);
|
||||
Assert.IsInstanceOfType(msg, typeof(Gprmb));
|
||||
Gprmb rmb = (Gprmb)msg;
|
||||
Assert.AreEqual(Gprmb.DataStatus.Ok, rmb.Status);
|
||||
Assert.AreEqual(-.66, rmb.CrossTrackError);
|
||||
Assert.AreEqual(3, rmb.OriginWaypointId);
|
||||
Assert.AreEqual(4, rmb.DestinationWaypointId);
|
||||
Assert.AreEqual(-49.287333333333333333, rmb.DestinationLatitude);
|
||||
Assert.AreEqual(-123.1595, rmb.DestinationLongitude);
|
||||
Assert.AreEqual(1.3, rmb.RangeToDestination);
|
||||
Assert.AreEqual(52.5, rmb.TrueBearing);
|
||||
Assert.AreEqual(.5, rmb.Velocity);
|
||||
Assert.AreEqual(false, rmb.Arrived);
|
||||
}
|
||||
[TestMethod]
|
||||
public void TestGprmb()
|
||||
{
|
||||
string input = "$GPRMB,A,0.66,L,003,004,4917.24,S,12309.57,W,001.3,052.5,000.5,V*3D";
|
||||
var msg = NmeaMessage.Parse(input);
|
||||
Assert.IsInstanceOfType(msg, typeof(Gprmb));
|
||||
Gprmb rmb = (Gprmb)msg;
|
||||
Assert.AreEqual(Gprmb.DataStatus.Ok, rmb.Status);
|
||||
Assert.AreEqual(-.66, rmb.CrossTrackError);
|
||||
Assert.AreEqual(3, rmb.OriginWaypointId);
|
||||
Assert.AreEqual(4, rmb.DestinationWaypointId);
|
||||
Assert.AreEqual(-49.287333333333333333, rmb.DestinationLatitude);
|
||||
Assert.AreEqual(-123.1595, rmb.DestinationLongitude);
|
||||
Assert.AreEqual(1.3, rmb.RangeToDestination);
|
||||
Assert.AreEqual(52.5, rmb.TrueBearing);
|
||||
Assert.AreEqual(.5, rmb.Velocity);
|
||||
Assert.AreEqual(false, rmb.Arrived);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void TestGprmc()
|
||||
{
|
||||
string input = "$GPRMC,123519,A,4807.038,S,01131.000,W,022.4,084.4,230313,003.1,W*6A";
|
||||
var msg = NmeaMessage.Parse(input);
|
||||
Assert.IsInstanceOfType(msg, typeof(Gprmc));
|
||||
Gprmc rmc = (Gprmc)msg;
|
||||
Assert.AreEqual(new DateTime(2013, 03, 23, 12, 35, 19, DateTimeKind.Utc), rmc.FixTime);
|
||||
Assert.AreEqual(-48.1173, rmc.Latitude);
|
||||
Assert.AreEqual(-11.516666666666667, rmc.Longitude, 0.0000000001);
|
||||
string input = "$GPRMC,123519,A,4807.038,S,01131.000,W,022.4,084.4,230313,003.1,W*6A";
|
||||
var msg = NmeaMessage.Parse(input);
|
||||
Assert.IsInstanceOfType(msg, typeof(Gprmc));
|
||||
Gprmc rmc = (Gprmc)msg;
|
||||
Assert.AreEqual(new DateTime(2013, 03, 23, 12, 35, 19, DateTimeKind.Utc), rmc.FixTime);
|
||||
Assert.AreEqual(-48.1173, rmc.Latitude);
|
||||
Assert.AreEqual(-11.516666666666667, rmc.Longitude, 0.0000000001);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
|
|
@ -121,23 +154,23 @@ namespace NmeaParser.Tests
|
|||
}
|
||||
|
||||
[TestMethod]
|
||||
public void TestGpgga()
|
||||
{
|
||||
string input = "$GPGGA,235236,3925.9479,N,11945.9211,W,1,10,0.8,1378.0,M,-22.1,M,,*46";
|
||||
var msg = NmeaMessage.Parse(input);
|
||||
Assert.IsInstanceOfType(msg, typeof(Gpgga));
|
||||
Gpgga gga = (Gpgga)msg;
|
||||
Assert.AreEqual(new TimeSpan(23, 52, 36), gga.FixTime);
|
||||
Assert.AreEqual(39.432465, gga.Latitude);
|
||||
Assert.AreEqual(-119.7653516666666667, gga.Longitude, 0.0000000001);
|
||||
Assert.AreEqual(NmeaParser.Nmea.Gps.Gpgga.FixQuality.GpsFix, gga.Quality);
|
||||
Assert.AreEqual(10, gga.NumberOfSatellites);
|
||||
Assert.AreEqual(.8, gga.Hdop);
|
||||
Assert.AreEqual(1378, gga.Altitude);
|
||||
Assert.AreEqual("M", gga.AltitudeUnits);
|
||||
Assert.AreEqual(-22.1, gga.HeightOfGeoid);
|
||||
Assert.AreEqual("M", gga.HeightOfGeoidUnits);
|
||||
Assert.AreEqual(-1, gga.DgpsStationId);
|
||||
public void TestGpgga()
|
||||
{
|
||||
string input = "$GPGGA,235236,3925.9479,N,11945.9211,W,1,10,0.8,1378.0,M,-22.1,M,,*46";
|
||||
var msg = NmeaMessage.Parse(input);
|
||||
Assert.IsInstanceOfType(msg, typeof(Gpgga));
|
||||
Gpgga gga = (Gpgga)msg;
|
||||
Assert.AreEqual(new TimeSpan(23, 52, 36), gga.FixTime);
|
||||
Assert.AreEqual(39.432465, gga.Latitude);
|
||||
Assert.AreEqual(-119.7653516666666667, gga.Longitude, 0.0000000001);
|
||||
Assert.AreEqual(NmeaParser.Nmea.Gps.Gpgga.FixQuality.GpsFix, gga.Quality);
|
||||
Assert.AreEqual(10, gga.NumberOfSatellites);
|
||||
Assert.AreEqual(.8, gga.Hdop);
|
||||
Assert.AreEqual(1378, gga.Altitude);
|
||||
Assert.AreEqual("M", gga.AltitudeUnits);
|
||||
Assert.AreEqual(-22.1, gga.HeightOfGeoid);
|
||||
Assert.AreEqual("M", gga.HeightOfGeoidUnits);
|
||||
Assert.AreEqual(-1, gga.DgpsStationId);
|
||||
Assert.AreEqual(TimeSpan.MaxValue, gga.TimeSinceLastDgpsUpdate);
|
||||
}
|
||||
|
||||
|
|
@ -163,144 +196,269 @@ namespace NmeaParser.Tests
|
|||
}
|
||||
|
||||
[TestMethod]
|
||||
public void TestPtlna()
|
||||
{
|
||||
string input = "$PTNLA,HV,002.94,M,288.1,D,008.6,D,002.98,M*74";
|
||||
var msg = NmeaMessage.Parse(input);
|
||||
Assert.IsInstanceOfType(msg, typeof(NmeaParser.Nmea.LaserRange.Trimble.Ptnla));
|
||||
NmeaParser.Nmea.LaserRange.Trimble.Ptnla ptlna = (NmeaParser.Nmea.LaserRange.Trimble.Ptnla)msg;
|
||||
Assert.AreEqual(2.94, ptlna.HorizontalDistance);
|
||||
Assert.AreEqual('M', ptlna.HorizontalDistanceUnits);
|
||||
Assert.AreEqual(288.1, ptlna.HorizontalAngle);
|
||||
Assert.AreEqual('D', ptlna.HorizontalAngleUnits);
|
||||
Assert.AreEqual(8.6, ptlna.VerticalAngle);
|
||||
Assert.AreEqual('D', ptlna.VerticalAngleUnits);
|
||||
Assert.AreEqual(2.98, ptlna.SlopeDistance);
|
||||
Assert.AreEqual('M', ptlna.SlopeDistanceUnits);
|
||||
}
|
||||
public void TestPtlna()
|
||||
{
|
||||
string input = "$PTNLA,HV,002.94,M,288.1,D,008.6,D,002.98,M*74";
|
||||
var msg = NmeaMessage.Parse(input);
|
||||
Assert.IsInstanceOfType(msg, typeof(NmeaParser.Nmea.LaserRange.Trimble.Ptnla));
|
||||
NmeaParser.Nmea.LaserRange.Trimble.Ptnla ptlna = (NmeaParser.Nmea.LaserRange.Trimble.Ptnla)msg;
|
||||
Assert.AreEqual(2.94, ptlna.HorizontalDistance);
|
||||
Assert.AreEqual('M', ptlna.HorizontalDistanceUnits);
|
||||
Assert.AreEqual(288.1, ptlna.HorizontalAngle);
|
||||
Assert.AreEqual('D', ptlna.HorizontalAngleUnits);
|
||||
Assert.AreEqual(8.6, ptlna.VerticalAngle);
|
||||
Assert.AreEqual('D', ptlna.VerticalAngleUnits);
|
||||
Assert.AreEqual(2.98, ptlna.SlopeDistance);
|
||||
Assert.AreEqual('M', ptlna.SlopeDistanceUnits);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void TestPgrme()
|
||||
{
|
||||
string input = "$PGRME,2.3,M,3.3,M,4.0,M*2B";
|
||||
var msg = NmeaMessage.Parse(input);
|
||||
Assert.IsInstanceOfType(msg, typeof(NmeaParser.Nmea.Gps.Garmin.Pgrme));
|
||||
NmeaParser.Nmea.Gps.Garmin.Pgrme rme = (NmeaParser.Nmea.Gps.Garmin.Pgrme)msg;
|
||||
Assert.AreEqual(2.3, rme.HorizontalError);
|
||||
Assert.AreEqual("M", rme.HorizontalErrorUnits);
|
||||
Assert.AreEqual(3.3, rme.VerticalError);
|
||||
Assert.AreEqual("M", rme.VerticalErrorUnits);
|
||||
Assert.AreEqual(4.0, rme.SphericalError);
|
||||
Assert.AreEqual("M", rme.SphericalErrorUnits);
|
||||
}
|
||||
[TestMethod]
|
||||
public void TestPgrme()
|
||||
{
|
||||
string input = "$PGRME,2.3,M,3.3,M,4.0,M*2B";
|
||||
var msg = NmeaMessage.Parse(input);
|
||||
Assert.IsInstanceOfType(msg, typeof(NmeaParser.Nmea.Gps.Garmin.Pgrme));
|
||||
NmeaParser.Nmea.Gps.Garmin.Pgrme rme = (NmeaParser.Nmea.Gps.Garmin.Pgrme)msg;
|
||||
Assert.AreEqual(2.3, rme.HorizontalError);
|
||||
Assert.AreEqual("M", rme.HorizontalErrorUnits);
|
||||
Assert.AreEqual(3.3, rme.VerticalError);
|
||||
Assert.AreEqual("M", rme.VerticalErrorUnits);
|
||||
Assert.AreEqual(4.0, rme.SphericalError);
|
||||
Assert.AreEqual("M", rme.SphericalErrorUnits);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void TestGpgsa_Empty()
|
||||
{
|
||||
string input = "$GPGSA,A,3,,,,,,16,18,,22,24,,,,,*14";
|
||||
var msg = NmeaMessage.Parse(input);
|
||||
Assert.IsInstanceOfType(msg, typeof(Gpgsa));
|
||||
Gpgsa gsa = (Gpgsa)msg;
|
||||
Assert.AreEqual(Gpgsa.ModeSelection.Auto, gsa.GpsMode);
|
||||
Assert.AreEqual(Gpgsa.Mode.Fix3D, gsa.FixMode);
|
||||
Assert.AreEqual(4, gsa.SVs.Count);
|
||||
Assert.AreEqual(16, gsa.SVs[0]);
|
||||
Assert.AreEqual(18, gsa.SVs[1]);
|
||||
Assert.AreEqual(22, gsa.SVs[2]);
|
||||
Assert.AreEqual(24, gsa.SVs[3]);
|
||||
Assert.AreEqual(double.NaN, gsa.Pdop);
|
||||
Assert.AreEqual(double.NaN, gsa.Hdop);
|
||||
Assert.AreEqual(double.NaN, gsa.Vdop);
|
||||
}
|
||||
[TestMethod]
|
||||
public void TestGpgsa()
|
||||
{
|
||||
string input = "$GPGSA,M,2,19,28,14,18,27,22,31,39,40,42,43,44,1.7,1.0,1.3*3C";
|
||||
var msg = NmeaMessage.Parse(input);
|
||||
Assert.IsInstanceOfType(msg, typeof(Gpgsa));
|
||||
Gpgsa gsa = (Gpgsa)msg;
|
||||
Assert.AreEqual(Gpgsa.ModeSelection.Manual, gsa.GpsMode);
|
||||
Assert.AreEqual(Gpgsa.Mode.Fix2D, gsa.FixMode);
|
||||
Assert.AreEqual(12, gsa.SVs.Count);
|
||||
Assert.AreEqual(19, gsa.SVs[0]);
|
||||
Assert.AreEqual(28, gsa.SVs[1]);
|
||||
Assert.AreEqual(14, gsa.SVs[2]);
|
||||
Assert.AreEqual(18, gsa.SVs[3]);
|
||||
Assert.AreEqual(27, gsa.SVs[4]);
|
||||
Assert.AreEqual(22, gsa.SVs[5]);
|
||||
Assert.AreEqual(31, gsa.SVs[6]);
|
||||
Assert.AreEqual(39, gsa.SVs[7]);
|
||||
Assert.AreEqual(40, gsa.SVs[8]);
|
||||
Assert.AreEqual(42, gsa.SVs[9]);
|
||||
Assert.AreEqual(43, gsa.SVs[10]);
|
||||
Assert.AreEqual(44, gsa.SVs[11]);
|
||||
Assert.AreEqual(1.7, gsa.Pdop);
|
||||
Assert.AreEqual(1.0, gsa.Hdop);
|
||||
Assert.AreEqual(1.3, gsa.Vdop);
|
||||
}
|
||||
[TestMethod]
|
||||
public void TestGpgsa_Empty()
|
||||
{
|
||||
string input = "$GPGSA,A,3,,,,,,16,18,,22,24,,,,,*14";
|
||||
var msg = NmeaMessage.Parse(input);
|
||||
Assert.IsInstanceOfType(msg, typeof(Gpgsa));
|
||||
Gpgsa gsa = (Gpgsa)msg;
|
||||
Assert.AreEqual(Gpgsa.ModeSelection.Auto, gsa.GpsMode);
|
||||
Assert.AreEqual(Gpgsa.Mode.Fix3D, gsa.FixMode);
|
||||
Assert.AreEqual(4, gsa.SVs.Count);
|
||||
Assert.AreEqual(16, gsa.SVs[0]);
|
||||
Assert.AreEqual(18, gsa.SVs[1]);
|
||||
Assert.AreEqual(22, gsa.SVs[2]);
|
||||
Assert.AreEqual(24, gsa.SVs[3]);
|
||||
Assert.AreEqual(double.NaN, gsa.Pdop);
|
||||
Assert.AreEqual(double.NaN, gsa.Hdop);
|
||||
Assert.AreEqual(double.NaN, gsa.Vdop);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void TestGpgsv()
|
||||
{
|
||||
string input = "$GPGSV,3,3,11,22,42,067,42,75,14,311,43,50,05,244,00,,,,*49";
|
||||
var msg = NmeaMessage.Parse(input);
|
||||
Assert.IsInstanceOfType(msg, typeof(Gpgsv));
|
||||
Gpgsv gsv = (Gpgsv)msg;
|
||||
Assert.AreEqual(3, gsv.TotalMessages);
|
||||
Assert.AreEqual(3, gsv.MessageNumber);
|
||||
Assert.AreEqual(11, gsv.SVsInView);
|
||||
Assert.IsNotNull(gsv.SVs);
|
||||
Assert.AreEqual(3, gsv.SVs.Count);
|
||||
var sv = gsv.SVs[0];
|
||||
Assert.AreEqual(22, sv.PrnNumber);
|
||||
Assert.AreEqual(42, sv.Elevation);
|
||||
Assert.AreEqual(67, sv.Azimuth);
|
||||
Assert.AreEqual(42, sv.SignalToNoiseRatio);
|
||||
Assert.AreEqual(SatelliteSystem.Gps, sv.System);
|
||||
[TestMethod]
|
||||
public void TestGpgsa()
|
||||
{
|
||||
string input = "$GPGSA,M,2,19,28,14,18,27,22,31,39,40,42,43,44,1.7,1.0,1.3*3C";
|
||||
var msg = NmeaMessage.Parse(input);
|
||||
Assert.IsInstanceOfType(msg, typeof(Gpgsa));
|
||||
Gpgsa gsa = (Gpgsa)msg;
|
||||
Assert.AreEqual(Gpgsa.ModeSelection.Manual, gsa.GpsMode);
|
||||
Assert.AreEqual(Gpgsa.Mode.Fix2D, gsa.FixMode);
|
||||
Assert.AreEqual(12, gsa.SVs.Count);
|
||||
Assert.AreEqual(19, gsa.SVs[0]);
|
||||
Assert.AreEqual(28, gsa.SVs[1]);
|
||||
Assert.AreEqual(14, gsa.SVs[2]);
|
||||
Assert.AreEqual(18, gsa.SVs[3]);
|
||||
Assert.AreEqual(27, gsa.SVs[4]);
|
||||
Assert.AreEqual(22, gsa.SVs[5]);
|
||||
Assert.AreEqual(31, gsa.SVs[6]);
|
||||
Assert.AreEqual(39, gsa.SVs[7]);
|
||||
Assert.AreEqual(40, gsa.SVs[8]);
|
||||
Assert.AreEqual(42, gsa.SVs[9]);
|
||||
Assert.AreEqual(43, gsa.SVs[10]);
|
||||
Assert.AreEqual(44, gsa.SVs[11]);
|
||||
Assert.AreEqual(1.7, gsa.Pdop);
|
||||
Assert.AreEqual(1.0, gsa.Hdop);
|
||||
Assert.AreEqual(1.3, gsa.Vdop);
|
||||
}
|
||||
|
||||
sv = gsv.SVs[1];
|
||||
Assert.AreEqual(75, sv.PrnNumber);
|
||||
Assert.AreEqual(14, sv.Elevation);
|
||||
Assert.AreEqual(311, sv.Azimuth);
|
||||
Assert.AreEqual(43, sv.SignalToNoiseRatio);
|
||||
Assert.AreEqual(SatelliteSystem.Glonass, sv.System);
|
||||
[TestMethod]
|
||||
public void TestGngsa()
|
||||
{
|
||||
string input = "$GNGSA,A,3,3,7,16,23,9,26,,,,,,,3.5,1.4,3.2*11";
|
||||
var msg = NmeaMessage.Parse(input);
|
||||
Assert.IsInstanceOfType(msg, typeof(Gngsa));
|
||||
Gngsa gsa = (Gngsa)msg;
|
||||
Assert.AreEqual(Gpgsa.ModeSelection.Auto, gsa.GpsMode);
|
||||
Assert.AreEqual(Gpgsa.Mode.Fix3D, gsa.FixMode);
|
||||
Assert.AreEqual(6, gsa.SVs.Count);
|
||||
Assert.AreEqual(3, gsa.SVs[0]);
|
||||
Assert.AreEqual(7, gsa.SVs[1]);
|
||||
Assert.AreEqual(16, gsa.SVs[2]);
|
||||
Assert.AreEqual(23, gsa.SVs[3]);
|
||||
Assert.AreEqual(9, gsa.SVs[4]);
|
||||
Assert.AreEqual(26, gsa.SVs[5]);
|
||||
Assert.AreEqual(3.5, gsa.Pdop);
|
||||
Assert.AreEqual(1.4, gsa.Hdop);
|
||||
Assert.AreEqual(3.2, gsa.Vdop);
|
||||
}
|
||||
|
||||
sv = gsv.SVs[2];
|
||||
Assert.AreEqual(50, sv.PrnNumber);
|
||||
Assert.AreEqual(5, sv.Elevation);
|
||||
Assert.AreEqual(244, sv.Azimuth);
|
||||
Assert.AreEqual(00, sv.SignalToNoiseRatio);
|
||||
Assert.AreEqual(SatelliteSystem.Waas, sv.System);
|
||||
}
|
||||
[TestMethod]
|
||||
public void TestGpgsv()
|
||||
{
|
||||
string input = "$GPGSV,3,3,11,22,42,067,42,75,14,311,43,50,05,244,00,,,,*49";
|
||||
var msg = NmeaMessage.Parse(input);
|
||||
Assert.IsInstanceOfType(msg, typeof(Gpgsv));
|
||||
Gpgsv gsv = (Gpgsv)msg;
|
||||
Assert.AreEqual(3, gsv.TotalMessages);
|
||||
Assert.AreEqual(3, gsv.MessageNumber);
|
||||
Assert.AreEqual(11, gsv.SVsInView);
|
||||
Assert.IsNotNull(gsv.SVs);
|
||||
Assert.AreEqual(3, gsv.SVs.Count);
|
||||
var sv = gsv.SVs[0];
|
||||
Assert.AreEqual(22, sv.PrnNumber);
|
||||
Assert.AreEqual(42, sv.Elevation);
|
||||
Assert.AreEqual(67, sv.Azimuth);
|
||||
Assert.AreEqual(42, sv.SignalToNoiseRatio);
|
||||
Assert.AreEqual(SatelliteSystem.Gps, sv.System);
|
||||
|
||||
[TestMethod]
|
||||
public void TestGpgsv_Empty()
|
||||
{
|
||||
string input = "$GPGSV,1,1,0,,,,,,,,,,,,,,,,*49";
|
||||
var msg = NmeaMessage.Parse(input);
|
||||
Assert.IsInstanceOfType(msg, typeof(Gpgsv));
|
||||
Gpgsv gsv = (Gpgsv)msg;
|
||||
Assert.AreEqual(1, gsv.TotalMessages);
|
||||
Assert.AreEqual(1, gsv.MessageNumber);
|
||||
Assert.AreEqual(0, gsv.SVsInView);
|
||||
Assert.IsNotNull(gsv.SVs);
|
||||
Assert.AreEqual(0, gsv.SVs.Count);
|
||||
}
|
||||
sv = gsv.SVs[1];
|
||||
Assert.AreEqual(75, sv.PrnNumber);
|
||||
Assert.AreEqual(14, sv.Elevation);
|
||||
Assert.AreEqual(311, sv.Azimuth);
|
||||
Assert.AreEqual(43, sv.SignalToNoiseRatio);
|
||||
Assert.AreEqual(SatelliteSystem.Glonass, sv.System);
|
||||
|
||||
[TestMethod]
|
||||
public void TestGpgll()
|
||||
{
|
||||
string input = "$GPGLL,4916.45,N,12311.12,W,225444.12,A,*30";
|
||||
var msg = NmeaMessage.Parse(input);
|
||||
Assert.IsInstanceOfType(msg, typeof(Gpgll));
|
||||
Gpgll gll = (Gpgll)msg;
|
||||
Assert.IsTrue(gll.DataActive);
|
||||
Assert.AreEqual(49.2741666666666666667, gll.Latitude);
|
||||
Assert.AreEqual(-123.18533333333333333, gll.Longitude);
|
||||
Assert.AreEqual(new TimeSpan(0,22,54,44,120), gll.FixTime);
|
||||
}
|
||||
sv = gsv.SVs[2];
|
||||
Assert.AreEqual(50, sv.PrnNumber);
|
||||
Assert.AreEqual(5, sv.Elevation);
|
||||
Assert.AreEqual(244, sv.Azimuth);
|
||||
Assert.AreEqual(00, sv.SignalToNoiseRatio);
|
||||
Assert.AreEqual(SatelliteSystem.Waas, sv.System);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
[TestMethod]
|
||||
public void TestGpgsv_Empty()
|
||||
{
|
||||
string input = "$GPGSV,1,1,0,,,,,,,,,,,,,,,,*49";
|
||||
var msg = NmeaMessage.Parse(input);
|
||||
Assert.IsInstanceOfType(msg, typeof(Gpgsv));
|
||||
Gpgsv gsv = (Gpgsv)msg;
|
||||
Assert.AreEqual(1, gsv.TotalMessages);
|
||||
Assert.AreEqual(1, gsv.MessageNumber);
|
||||
Assert.AreEqual(0, gsv.SVsInView);
|
||||
Assert.IsNotNull(gsv.SVs);
|
||||
Assert.AreEqual(0, gsv.SVs.Count);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void TestGpgll()
|
||||
{
|
||||
string input = "$GPGLL,4916.45,N,12311.12,W,225444.12,A,*30";
|
||||
var msg = NmeaMessage.Parse(input);
|
||||
Assert.IsInstanceOfType(msg, typeof(Gpgll));
|
||||
Gpgll gll = (Gpgll)msg;
|
||||
Assert.IsTrue(gll.DataActive);
|
||||
Assert.AreEqual(49.2741666666666666667, gll.Latitude);
|
||||
Assert.AreEqual(-123.18533333333333333, gll.Longitude);
|
||||
Assert.AreEqual(new TimeSpan(0, 22, 54, 44, 120), gll.FixTime);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void TestGngll()
|
||||
{
|
||||
string input = "$GNGLL,3403.47121040,N,11711.80878910,W,235715.00,A,D*66";
|
||||
var msg = NmeaMessage.Parse(input);
|
||||
Assert.IsInstanceOfType(msg, typeof(Gngll));
|
||||
Gngll gll = (Gngll)msg;
|
||||
Assert.IsTrue(gll.DataActive);
|
||||
Assert.AreEqual(34.0578535066667, gll.Latitude, .000000000001);
|
||||
Assert.AreEqual(-117.196813151667, gll.Longitude, .000000000001);
|
||||
Assert.AreEqual(new TimeSpan(0, 23, 57, 15, 0), gll.FixTime);
|
||||
}
|
||||
|
||||
|
||||
|
||||
[TestMethod]
|
||||
public void TestGpgns()
|
||||
{
|
||||
string input = "$GPGNS,224749.00,3333.4268304,N,11153.3538273,W,D,19,0.6,406.110,-26.294,6.0,0138,S*6A";
|
||||
var msg = NmeaMessage.Parse(input);
|
||||
Assert.IsInstanceOfType(msg, typeof(Gpgns));
|
||||
Gpgns gns = (Gpgns)msg;
|
||||
Assert.AreEqual(new TimeSpan(0, 22, 47, 49, 0), gns.FixTime);
|
||||
Assert.AreEqual(33.55711384, gns.Latitude, .000000000001);
|
||||
Assert.AreEqual(-111.889230455, gns.Longitude, .000000000001);
|
||||
Assert.AreEqual(Gns.Mode.Differential, gns.GpsModeIndicator);
|
||||
Assert.AreEqual(Gns.Mode.NoFix, gns.GlonassModeIndicator);
|
||||
Assert.AreEqual(0, gns.FutureModeIndicator.Length);
|
||||
Assert.AreEqual(19, gns.NumberOfSatellites);
|
||||
Assert.AreEqual(.6, gns.Hdop);
|
||||
Assert.AreEqual(406.110, gns.OrhometricHeight);
|
||||
Assert.AreEqual(-26.294, gns.GeoidalSeparation);
|
||||
Assert.AreEqual("0138", gns.DgpsStationId);
|
||||
Assert.AreEqual(Gns.NavigationalStatus.Safe, gns.Status);
|
||||
Assert.AreEqual(TimeSpan.FromSeconds(6), gns.TimeSinceLastDgpsUpdate);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void TestGpgns_NoData()
|
||||
{
|
||||
string input = "$GPGNS,235720.00,,,,,,6,,,,2.0,0*48";
|
||||
var msg = NmeaMessage.Parse(input);
|
||||
Assert.IsInstanceOfType(msg, typeof(Gpgns));
|
||||
Gpgns gns = (Gpgns)msg;
|
||||
Assert.AreEqual(new TimeSpan(0, 23, 57, 20, 0), gns.FixTime);
|
||||
Assert.AreEqual(double.NaN, gns.Latitude);
|
||||
Assert.AreEqual(double.NaN, gns.Longitude);
|
||||
Assert.AreEqual(Gns.Mode.NoFix, gns.GpsModeIndicator);
|
||||
Assert.AreEqual(Gns.Mode.NoFix, gns.GlonassModeIndicator);
|
||||
Assert.AreEqual(0, gns.FutureModeIndicator.Length);
|
||||
Assert.AreEqual(6, gns.NumberOfSatellites);
|
||||
Assert.AreEqual(double.NaN, gns.Hdop);
|
||||
Assert.AreEqual(double.NaN, gns.OrhometricHeight);
|
||||
Assert.AreEqual(double.NaN, gns.GeoidalSeparation);
|
||||
Assert.AreEqual(TimeSpan.FromSeconds(2), gns.TimeSinceLastDgpsUpdate);
|
||||
Assert.AreEqual("0", gns.DgpsStationId);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void TestGngns()
|
||||
{
|
||||
string input = "$GNGNS,235719.00,3403.47068778,N,11711.80950154,W,DDNNN,10,1.4,402.411,-32.133,,*26";
|
||||
var msg = NmeaMessage.Parse(input);
|
||||
Assert.IsInstanceOfType(msg, typeof(Gngns));
|
||||
Gngns gns = (Gngns)msg;
|
||||
Assert.AreEqual(new TimeSpan(0, 23, 57, 19, 0), gns.FixTime);
|
||||
Assert.AreEqual(34.0578447963333, gns.Latitude, .000000000001);
|
||||
Assert.AreEqual(-117.196825025667, gns.Longitude, .00000000001);
|
||||
Assert.AreEqual(Gns.Mode.Differential, gns.GpsModeIndicator);
|
||||
Assert.AreEqual(Gns.Mode.Differential, gns.GlonassModeIndicator);
|
||||
Assert.AreEqual(3, gns.FutureModeIndicator.Length);
|
||||
Assert.AreEqual(Gns.Mode.NoFix, gns.FutureModeIndicator[0]);
|
||||
Assert.AreEqual(Gns.Mode.NoFix, gns.FutureModeIndicator[1]);
|
||||
Assert.AreEqual(Gns.Mode.NoFix, gns.FutureModeIndicator[2]);
|
||||
Assert.AreEqual(10, gns.NumberOfSatellites);
|
||||
Assert.AreEqual(1.4, gns.Hdop);
|
||||
Assert.AreEqual(402.411, gns.OrhometricHeight);
|
||||
Assert.AreEqual(-32.133, gns.GeoidalSeparation);
|
||||
Assert.AreEqual(TimeSpan.MaxValue, gns.TimeSinceLastDgpsUpdate);
|
||||
Assert.AreEqual(null, gns.DgpsStationId);
|
||||
}
|
||||
|
||||
|
||||
[TestMethod]
|
||||
public void TestGlgns()
|
||||
{
|
||||
string input = "$GLGNS,235720.00,,,,,,4,,,,2.0,0*56";
|
||||
var msg = NmeaMessage.Parse(input);
|
||||
Assert.IsInstanceOfType(msg, typeof(Glgns));
|
||||
Glgns gns = (Glgns)msg;
|
||||
Assert.AreEqual(new TimeSpan(0, 23, 57, 20, 0), gns.FixTime);
|
||||
Assert.AreEqual(double.NaN, gns.Latitude);
|
||||
Assert.AreEqual(double.NaN, gns.Longitude);
|
||||
Assert.AreEqual(Gns.Mode.NoFix, gns.GpsModeIndicator);
|
||||
Assert.AreEqual(Gns.Mode.NoFix, gns.GlonassModeIndicator);
|
||||
Assert.AreEqual(0, gns.FutureModeIndicator.Length);
|
||||
Assert.AreEqual(4, gns.NumberOfSatellites);
|
||||
Assert.AreEqual(double.NaN, gns.Hdop);
|
||||
Assert.AreEqual(double.NaN, gns.OrhometricHeight);
|
||||
Assert.AreEqual(double.NaN, gns.GeoidalSeparation);
|
||||
Assert.AreEqual(TimeSpan.FromSeconds(2), gns.TimeSinceLastDgpsUpdate);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void TestGpgll_NoFixTime_OrActiveIndicator()
|
||||
{
|
||||
string input = "$GPGLL,3751.65,S,14507.36,E*77";
|
||||
|
|
|
|||
Loading…
Reference in a new issue