Improved parsing of values not available in NMEA message

This commit is contained in:
mort5161 2014-11-12 10:58:58 -08:00
parent 5f660c3343
commit a8cb9c3607
4 changed files with 32 additions and 16 deletions

View file

@ -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)
{

View file

@ -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;
}

View file

@ -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];
}

View file

@ -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; }
}
}
}