mirror of
https://github.com/dotMorten/NmeaParser.git
synced 2026-01-07 17:20:07 +01:00
Improved parsing of values not available in NMEA message
This commit is contained in:
parent
5f660c3343
commit
a8cb9c3607
|
|
@ -49,10 +49,10 @@ namespace NmeaParser.Nmea.Gps
|
|||
Longitude = NmeaMessage.StringToLongitude(message[3], message[4]);
|
||||
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);
|
||||
Hdop = NmeaMessage.StringToDouble(message[7]);
|
||||
Altitude = NmeaMessage.StringToDouble(message[8]);
|
||||
AltitudeUnits = message[9];
|
||||
HeightOfGeoid = double.Parse(message[10], CultureInfo.InvariantCulture);
|
||||
HeightOfGeoid = NmeaMessage.StringToDouble(message[10]);
|
||||
HeightOfGeoidUnits = message[11];
|
||||
if (message[0].Length == 6)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -31,19 +31,22 @@ namespace NmeaParser.Nmea.Gps
|
|||
{
|
||||
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);
|
||||
if (message[8].Length == 6 && message[0].Length == 6)
|
||||
{
|
||||
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 = NmeaMessage.StringToLatitude(message[2], message[3]);
|
||||
Longitude = NmeaMessage.StringToLongitude(message[4], message[5]);
|
||||
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")
|
||||
Speed = NmeaMessage.StringToDouble(message[6]);
|
||||
Course = NmeaMessage.StringToDouble(message[7]);
|
||||
MagneticVariation = NmeaMessage.StringToDouble(message[9]);
|
||||
if (!double.IsNaN(MagneticVariation) && message[10] == "W")
|
||||
MagneticVariation *= -1;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -31,11 +31,11 @@ namespace NmeaParser.Nmea.Gps.Garmin
|
|||
{
|
||||
protected override void LoadMessage(string[] message)
|
||||
{
|
||||
HorizontalError = double.Parse(message[0], CultureInfo.InvariantCulture);
|
||||
HorizontalError = NmeaMessage.StringToDouble(message[0]);
|
||||
HorizontalErrorUnits = message[1];
|
||||
VerticalError = double.Parse(message[2], CultureInfo.InvariantCulture);
|
||||
VerticalError = NmeaMessage.StringToDouble(message[2]);
|
||||
VerticalErrorUnits = message[3];
|
||||
SphericalError = double.Parse(message[4], CultureInfo.InvariantCulture);
|
||||
SphericalError = NmeaMessage.StringToDouble(message[4]);
|
||||
SphericalErrorUnits = message[5];
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -137,5 +137,18 @@ namespace NmeaParser.Nmea
|
|||
}
|
||||
catch { return double.NaN; }
|
||||
}
|
||||
internal static double StringToDouble(string value)
|
||||
{
|
||||
try
|
||||
{
|
||||
double result = double.NaN;
|
||||
if(double.TryParse(value, NumberStyles.Any, CultureInfo.InvariantCulture, out result))
|
||||
{
|
||||
return result;
|
||||
}
|
||||
return double.NaN;
|
||||
}
|
||||
catch { return double.NaN; }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue