public void TestNMEAMessageParsing() { var format = new CultureInfo("en-US", false); format.NumberFormat.NumberDecimalSeparator = "."; var message = "$GNRMC,091613.699,A,5651.7446,N,02406.7933,E,0.18,-49.88,231020,,,A*69"; var coordinate = new NMEACoordinates() { Format = format, }; coordinate.ParseNMEAMessage(message); Assert.Pass("Test Passed"); }
public void TestGoogleToNMEACoordinates() { var format = new CultureInfo("en-US", false); format.NumberFormat.NumberDecimalSeparator = "."; var nmeaCoordinate = new NMEACoordinates() { Format = format, Latitude = 56.86241, Longitude = 24.113221, NorthOrSouth = "N", EastOrWest = "E" }; var latitude = double.Parse(nmeaCoordinate.ConvertToNMEACoordringates(nmeaCoordinate.Latitude.Value), format); var longitude = double.Parse(nmeaCoordinate.ConvertToNMEACoordringates(nmeaCoordinate.Longitude.Value), format); Assert.IsTrue(latitude - 5651.7446 < Delta && longitude - 2406.7933 < Delta); }
public void TestNMEAToGoogleCoordinates() { var format = new CultureInfo("en-US", false); format.NumberFormat.NumberDecimalSeparator = "."; var nmeaCoordinate = new NMEACoordinates() { Format = format, NMEALatitude = "5651.7446", NMEALongitude = "2406.7933", NorthOrSouth = "N", EastOrWest = "E" }; var latitude = nmeaCoordinate.ConvertToGoogleCoordinates(nmeaCoordinate.NMEALatitude, nmeaCoordinate.NorthOrSouth); var longitude = nmeaCoordinate.ConvertToGoogleCoordinates(nmeaCoordinate.NMEALongitude, nmeaCoordinate.EastOrWest); Assert.IsTrue(latitude - 56.86241 < Delta && longitude - 24.113221 < Delta); }
public override List <IGeoCoordinates> Parse(string logPath) { if (!File.Exists(logPath)) { throw new FileNotFoundException("File {logPath} does not exist"); } if (Template == null) { throw new NullReferenceException($"Template is not set"); } if (Template.DataMapping.Date?.Source == Yaml.Data.Source.FileName) { ParseDateFromNameOfFile(logPath); } var coordinates = new List <IGeoCoordinates>(); using (StreamReader reader = File.OpenText(logPath)) { string line = SkipLines(reader); format = new CultureInfo("en-US", false); format.NumberFormat.NumberDecimalSeparator = Template.Format.DecimalSeparator; var traceCount = 0; while ((line = reader.ReadLine()) != null) { if (line.StartsWith(Template.Format.CommentPrefix)) { continue; } var data = line.Split(new[] { Template.Format.Separator }, StringSplitOptions.None); var date = ParseDateTime(data); var nmeaCoordinate = new NMEACoordinates() { Format = format }; nmeaCoordinate.ParseNMEAMessage(data[Template.DataMapping.Longitude.Index.Value]); nmeaCoordinate.TraceNumber = traceCount; nmeaCoordinate.DateTime = date; traceCount++; coordinates.Add(nmeaCoordinate); } } return(coordinates); }
public void TestCheckSumCalculation() { var format = new CultureInfo("en-US", false); format.NumberFormat.NumberDecimalSeparator = "."; var message = "$GNRMC,091613.699,A,5651.7446,N,02406.7933,E,0.18,-49.88,231020,,,A*69"; var coordinate = new NMEACoordinates() { Format = format, }; coordinate.ParseNMEAMessage(message); var ckecksum = coordinate.CalculateCheckSum().ToString("X"); message = "$GNRMC,091617.692,A,5651.7447,N,02406.7932,E,0.11,-50.19,231020,,,A*6F"; coordinate.ParseNMEAMessage(message); var secondChecksum = coordinate.CalculateCheckSum().ToString("X"); Assert.IsTrue(ckecksum == "69" && secondChecksum == "6F"); }
public override Result CreateFileWithCorrectedCoordinates(string oldFile, string newFile, IEnumerable <IGeoCoordinates> coordinates, CancellationTokenSource token) { if (!File.Exists(oldFile)) { throw new FileNotFoundException("File {oldFile} does not exist"); } if (Template == null) { throw new NullReferenceException($"Template is not set"); } var result = new Result(); format = new CultureInfo("en-US", false); format.NumberFormat.NumberDecimalSeparator = Template.Format.DecimalSeparator; using StreamReader reader = File.OpenText(oldFile); string line; var traceCount = 0; var dict = coordinates.ToDictionary(k => k.TraceNumber); using (StreamWriter correctedFile = new StreamWriter(newFile)) { if (Template.SkipLinesTo != null) { line = SkipLines(reader); correctedFile.WriteLine(skippedLines.ToString().TrimEnd(new char[] { '\n' })); } if (Template.Format.HasHeader) { line = reader.ReadLine(); correctedFile.WriteLine(Regex.Replace(line, @"\s", "")); } while ((line = reader.ReadLine()) != null) { if (token.IsCancellationRequested) { break; } try { if (line.StartsWith(Template.Format.CommentPrefix)) { continue; } var data = line.Split(new[] { Template.Format.Separator }, StringSplitOptions.None); var traceNumber = traceCount; var coordinateFound = dict.TryGetValue(traceNumber, out IGeoCoordinates coordinate); if (coordinateFound) { NMEACoordinates nmeaCoordinate = coordinate as NMEACoordinates; nmeaCoordinate.SetNewNmeaCoordinates(); var checksum = nmeaCoordinate.CalculateCheckSum(); data[(int)Template.DataMapping.Longitude.Index] = nmeaCoordinate.CreateNMEAMessage(checksum.ToString("X")); correctedFile.WriteLine(string.Join(Template.Format.Separator, data)); result.CountOfReplacedLines++; } } catch (Exception) { } finally { result.CountOfLines++; CountOfReplacedLines++; traceCount++; } } } return(result); }