Пример #1
0
        private static void WritePointsAsGpx(string outputPath, List <Position> sortedPoints)
        {
            var points = sortedPoints.Select(p => new Wpt((decimal)p.Latitude, (decimal)p.Longitude)
            {
                Time = p.Time.UtcDateTime, TimeSpecified = true
            }).ToList();

            if (!points.Any())
            {
                using (var se = new StreamWriter(System.Console.OpenStandardError()))
                {
                    se.WriteLine("Couldn't find any pictures with GPS coordinates");
                    return;
                }
            }
            var      gpx           = new GPXLib();
            int      trackIndex    = 0;
            DateTime lastPointTime = points[trackIndex].Time;

            foreach (var point in points)
            {
                if (point.Time.Subtract(lastPointTime).TotalHours > 5)
                {
                    trackIndex++;
                }
                lastPointTime = point.Time;
                gpx.AddTrackPoint($"maintrack{trackIndex}", 0, point);
            }

            gpx.SaveToFile(Path.Combine(outputPath, "track.gpx"));
            File.WriteAllText(Path.Combine(outputPath, "track.json"), JsonConvert.SerializeObject(sortedPoints));
        }
Пример #2
0
        static void Main(string[] args)
        {
            if (args.Length > 0 && File.Exists(args[0]))
            {
                var path = args[0];
                using (StreamReader sr = new StreamReader(path))
                {
                    var json = JsonValue.Parse(sr.ReadToEnd());

                    GPXLib gpx = new GPXLib();

                    var meta        = json["meta"];
                    var data        = json["data"];
                    var trackNum    = 0;
                    var waypointNum = 0;
                    foreach (JsonValue elem in data)
                    {
                        string type = elem["type"];
                        switch (type)
                        {
                        case "TZ":
                            ParseTimezone(gpx, elem);
                            break;

                        case "TRACK":
                            ParseTrack(gpx, elem, ++trackNum);
                            break;

                        case "NO_SIGNAL":
                            ParseNoSignal(gpx, elem);
                            break;

                        case "WAYPOINT":
                            ParseWaypoint(gpx, elem, ++waypointNum);
                            break;

                        case "STOP":
                            ParseStop(gpx, elem);
                            break;

                        default:
                            throw new NotImplementedException();
                        }
                    }


                    gpx.Metadata.Name = "Starline GPX Track";

                    var startDate = Date.DateTimeFromUnixTimestampSeconds(Date.minSeconds);
                    var endDate   = Date.DateTimeFromUnixTimestampSeconds(Date.maxSeconds);
                    gpx.Metadata.Desc = String.Format("Track from {0} to {1}", startDate, endDate);

                    gpx.Creator = "starlineonline2gpx converter";

                    gpx.Metadata.Bounds.Maxlat = Maxlat;
                    gpx.Metadata.Bounds.Minlat = Minlat;
                    gpx.Metadata.Bounds.Maxlon = Maxlon;
                    gpx.Metadata.Bounds.Minlon = Minlon;
                    gpx.Metadata.Time          = startDate;
                    gpx.Metadata.TimeSpecified = true;

                    var author = new Person();
                    author.Link.Href    = @"https://github.com/DJm00n/starlineonline2gpx";
                    author.Email.Id     = @"dimitriy.ryazantcev";
                    author.Email.Domain = "gmail.com";
                    author.Name         = @"Dimitriy Ryazantcev";

                    gpx.Metadata.Author = author;


                    gpx.SaveToFile(Path.ChangeExtension(path, "gpx"));
                }
            }
        }