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)); }
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")); } } }