mirror of
https://github.com/dotMorten/NmeaParser.git
synced 2026-04-21 06:13:58 +00:00
Added support for WinDesktop
This commit is contained in:
parent
254da8a14c
commit
c5150bba41
26 changed files with 410 additions and 188 deletions
106
src/NmeaParser.Shared/Nmea/Gps/GPGGA.cs
Normal file
106
src/NmeaParser.Shared/Nmea/Gps/GPGGA.cs
Normal file
|
|
@ -0,0 +1,106 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace NmeaParser.Nmea.Gps
|
||||
{
|
||||
/// <summary>
|
||||
/// Recommended Minimum
|
||||
/// </summary>
|
||||
[NmeaMessageType(Type = "GPGGA")]
|
||||
public class Gpgga : NmeaMessage
|
||||
{
|
||||
public enum FixQuality : int
|
||||
{
|
||||
Invalid = 0,
|
||||
GpsFix = 1,
|
||||
DgpsFix = 2,
|
||||
PpsFix = 3,
|
||||
Rtk = 4,
|
||||
FloatRtk = 5,
|
||||
Estimated = 6,
|
||||
ManualInput = 7,
|
||||
Simulation = 8
|
||||
}
|
||||
|
||||
protected override void LoadMessage(string[] message)
|
||||
{
|
||||
var time = message[0];
|
||||
Latitude = int.Parse(message[1].Substring(0, 2), CultureInfo.InvariantCulture) + double.Parse(message[1].Substring(2), CultureInfo.InvariantCulture) / 60;
|
||||
if (message[2] == "S")
|
||||
Latitude *= -1;
|
||||
Longitude = int.Parse(message[3].Substring(0, 3), CultureInfo.InvariantCulture) + double.Parse(message[3].Substring(3), CultureInfo.InvariantCulture) / 60;
|
||||
if (message[4] == "W")
|
||||
Latitude *= -1;
|
||||
Quality = (FixQuality)int.Parse(message[5], CultureInfo.InvariantCulture);
|
||||
NumberOfSatellites = int.Parse(message[6], CultureInfo.InvariantCulture);
|
||||
Hdop = double.Parse(message[7], CultureInfo.InvariantCulture);
|
||||
Altitude = double.Parse(message[8], CultureInfo.InvariantCulture);
|
||||
AltitudeUnits = message[9];
|
||||
HeightOfGeoid = double.Parse(message[10], CultureInfo.InvariantCulture);
|
||||
HeightOfGeoidUnits = message[11];
|
||||
if (message[12].Length > 0)
|
||||
TimeSinceLastDgpsUpdate = TimeSpan.FromSeconds(int.Parse(message[12], CultureInfo.InvariantCulture));
|
||||
if (message[13].Length > 0)
|
||||
DgpsStationID = int.Parse(message[13], CultureInfo.InvariantCulture);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Latitude
|
||||
/// </summary>
|
||||
public double Latitude { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Longitude
|
||||
/// </summary>
|
||||
public double Longitude { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Fix Quality
|
||||
/// </summary>
|
||||
public FixQuality Quality { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Number of satellites being tracked
|
||||
/// </summary>
|
||||
public int NumberOfSatellites { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Horizontal Dilution of Precision
|
||||
/// </summary>
|
||||
public double Hdop { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Altitude
|
||||
/// </summary>
|
||||
public double Altitude { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Altitude units ('M' for Meters)
|
||||
/// </summary>
|
||||
public string AltitudeUnits { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Height of geoid (mean sea level) above WGS84
|
||||
/// </summary>
|
||||
public double HeightOfGeoid { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Altitude units ('M' for Meters)
|
||||
/// </summary>
|
||||
public string HeightOfGeoidUnits { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Time since last DGPS update
|
||||
/// </summary>
|
||||
public TimeSpan TimeSinceLastDgpsUpdate { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// DGPS Station ID Number
|
||||
/// </summary>
|
||||
public int DgpsStationID { get; set; }
|
||||
}
|
||||
}
|
||||
73
src/NmeaParser.Shared/Nmea/Gps/GPRMC.cs
Normal file
73
src/NmeaParser.Shared/Nmea/Gps/GPRMC.cs
Normal file
|
|
@ -0,0 +1,73 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace NmeaParser.Nmea.Gps
|
||||
{
|
||||
/// <summary>
|
||||
/// Recommended Minimum
|
||||
/// </summary>
|
||||
[NmeaMessageType(Type = "GPRMC")]
|
||||
public class Gprmc : NmeaMessage
|
||||
{
|
||||
protected override void LoadMessage(string[] message)
|
||||
{
|
||||
FixTime = new DateTime(int.Parse(message[8].Substring(4, 2)) + 2000,
|
||||
int.Parse(message[8].Substring(2, 2)),
|
||||
int.Parse(message[8].Substring(0, 2)),
|
||||
int.Parse(message[0].Substring(0, 2)),
|
||||
int.Parse(message[0].Substring(2, 2)),
|
||||
int.Parse(message[0].Substring(4, 2)), DateTimeKind.Utc);
|
||||
Active = (message[1] == "A");
|
||||
Latitude = int.Parse(message[2].Substring(0, 2), CultureInfo.InvariantCulture) + double.Parse(message[2].Substring(2), CultureInfo.InvariantCulture) / 60;
|
||||
if (message[3] == "S")
|
||||
Latitude *= -1;
|
||||
Longitude = int.Parse(message[4].Substring(0, 3), CultureInfo.InvariantCulture) + double.Parse(message[4].Substring(3), CultureInfo.InvariantCulture) / 60;
|
||||
if (message[5] == "W")
|
||||
Latitude *= -1;
|
||||
Speed = double.Parse(message[6], CultureInfo.InvariantCulture);
|
||||
Course = double.Parse(message[7], CultureInfo.InvariantCulture);
|
||||
MagneticVariation = double.Parse(message[9], CultureInfo.InvariantCulture);
|
||||
if (message[10] == "W")
|
||||
MagneticVariation *= -1;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Fix Time
|
||||
/// </summary>
|
||||
public DateTime FixTime { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets a value whether the device is active
|
||||
/// </summary>
|
||||
public bool Active { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Latitude
|
||||
/// </summary>
|
||||
public double Latitude { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Longitude
|
||||
/// </summary>
|
||||
public double Longitude { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Speed over the ground in knots
|
||||
/// </summary>
|
||||
public double Speed { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Track angle in degrees True
|
||||
/// </summary>
|
||||
public double Course { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Magnetic Variation
|
||||
/// </summary>
|
||||
public double MagneticVariation { get; private set; }
|
||||
}
|
||||
}
|
||||
56
src/NmeaParser.Shared/Nmea/Gps/Garmin/PGRME.cs
Normal file
56
src/NmeaParser.Shared/Nmea/Gps/Garmin/PGRME.cs
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace BTDevices.Nmea.Gps
|
||||
{
|
||||
/// <summary>
|
||||
/// Recommended Minimum
|
||||
/// </summary>
|
||||
[NmeaMessageType(Type = "PGRME")]
|
||||
public class Pgrme : NmeaMessage
|
||||
{
|
||||
protected override void LoadMessage(string[] message)
|
||||
{
|
||||
HorizontalError = double.Parse(message[0], CultureInfo.InvariantCulture);
|
||||
HorizontalErrorUnits = message[1];
|
||||
VerticalError = double.Parse(message[2], CultureInfo.InvariantCulture);
|
||||
VerticalErrorUnits = message[3];
|
||||
SphericalError = double.Parse(message[4], CultureInfo.InvariantCulture);
|
||||
SphericalErrorUnits = message[5];
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Estimated horizontal position error in meters (HPE)
|
||||
/// </summary>
|
||||
public double HorizontalError { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Horizontal Error unit ('M' for Meters)
|
||||
/// </summary>
|
||||
public string HorizontalErrorUnits { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Estimated vertical position error in meters (VPE)
|
||||
/// </summary>
|
||||
public double VerticalError { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Vertical Error unit ('M' for Meters)
|
||||
/// </summary>
|
||||
public string VerticalErrorUnits { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Overall spherical equivalent position error
|
||||
/// </summary>
|
||||
public double SphericalError { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Spherical Error unit ('M' for Meters)
|
||||
/// </summary>
|
||||
public string SphericalErrorUnits { get; private set; }
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue