Exemple #1
0
        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");
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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);
        }
Exemple #4
0
        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);
        }
Exemple #5
0
        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");
        }
Exemple #6
0
        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);
        }