/// <summary> /// Initializes the NMEA Geographic position, Latitude and Longitude and parses an NMEA sentence /// </summary> /// <param name="NMEAsentence"></param> public GPGLL(string NMEAsentence) { try { //Split into an array of strings. string[] split = NMEAsentence.Split(new Char[] { ',' }); try { _position = new Coordinate(GPSHandler.GPSToDecimalDegrees(split[3], split[4]), GPSHandler.GPSToDecimalDegrees(split[1], split[2])); } catch { _position = null; } try { _timeOfSolution = new TimeSpan(int.Parse(split[5].Substring(0, 2)), int.Parse(split[5].Substring(2, 2)), int.Parse(split[5].Substring(4))); } catch { _timeOfSolution = null; // TimeSpan.Zero; } _dataValid = (split[6] == "A"); } catch { } }
/// <summary> /// Initializes the NMEA Global Positioning System Fix Data and parses an NMEA sentence /// </summary> /// <param name="NMEAsentence"></param> public GPGGA(string NMEAsentence) { try { if (NMEAsentence.IndexOf('*') > 0) { NMEAsentence = NMEAsentence.Substring(0, NMEAsentence.IndexOf('*')); } //Split into an array of strings. string[] split = NMEAsentence.Split(new Char[] { ',' }); if (split[1].Length >= 6) { TimeSpan t = new TimeSpan(GPSHandler.intTryParse(split[1].Substring(0, 2)), GPSHandler.intTryParse(split[1].Substring(2, 2)), GPSHandler.intTryParse(split[1].Substring(4, 2))); DateTime nowutc = DateTime.UtcNow; nowutc = nowutc.Add(-nowutc.TimeOfDay); _timeOfFix = nowutc.Add(t); } _position = new Coordinate(GPSHandler.GPSToDecimalDegrees(split[4], split[5]), GPSHandler.GPSToDecimalDegrees(split[2], split[3])); if (split[6] == "1") { _fixQuality = FixQualityEnum.GPS; } else if (split[6] == "2") { _fixQuality = FixQualityEnum.DGPS; } else { _fixQuality = FixQualityEnum.Invalid; } _noOfSats = Convert.ToByte(split[7]); GPSHandler.dblTryParse(split[8], out _dilution); GPSHandler.dblTryParse(split[9], out _altitude); _altitudeUnits = split[10][0]; GPSHandler.dblTryParse(split[11], out _heightOfGeoid); GPSHandler.intTryParse(split[13], out _dGPSUpdate); _dGPSStationID = split[14]; } catch { } }
/// <summary> /// Initializes the NMEA Recommended minimum specific GPS/Transit data and parses an NMEA sentence /// </summary> /// <param name="NMEAsentence"></param> public GPRMC(string NMEAsentence) { try { //Split into an array of strings. string[] split = NMEAsentence.Split(new Char[] { ',' }); //Extract date/time try { string[] DateTimeFormats = { "ddMMyyHHmmss", "ddMMyy", "ddMMyyHHmmss.FFFFFF" }; if (split[9].Length >= 6) //Require at least the date to be present { string time = split[9] + split[1]; // +" 0"; _timeOfFix = DateTime.ParseExact(time, DateTimeFormats, GPSHandler.NumberFormatEnUs, System.Globalization.DateTimeStyles.AssumeUniversal); } else { _timeOfFix = new DateTime(); } } catch { _timeOfFix = new DateTime(); } if (split[2] == "A") { _status = StatusEnum.OK; } else { _status = StatusEnum.Warning; } _position = new Coordinate(GPSHandler.GPSToDecimalDegrees(split[5], split[6]), GPSHandler.GPSToDecimalDegrees(split[3], split[4])); GPSHandler.dblTryParse(split[7], out _speed); GPSHandler.dblTryParse(split[8], out _course); GPSHandler.dblTryParse(split[10], out _magneticVariation); } catch { } }