public void WriteTrack(IGpxTrack track) { // create header if needed if (_xml == null) { WriteHeader(track.Name, track.Description, track.Points.First().Timestamp.Value); } // create track var trk = _xml.CreateElement("trk", Namespace); _xml.DocumentElement.AppendChild(trk); if (!String.IsNullOrWhiteSpace(track.Name)) { var nameNode = _xml.CreateElement("name", Namespace); trk.AppendChild(nameNode); nameNode.InnerText = track.Name; } if (!String.IsNullOrWhiteSpace(track.Description)) { var descriptionNode = _xml.CreateElement("desc", Namespace); trk.AppendChild(descriptionNode); descriptionNode.InnerText = track.Description; } if (!String.IsNullOrWhiteSpace(track.Source)) { var sourceNode = _xml.CreateElement("src", Namespace); trk.AppendChild(sourceNode); sourceNode.InnerText = track.Source; } XmlElement tracksegmentNode = null; var segment = -1; foreach (var p in track.Points.OrderBy(x => x.Segment).ThenBy(x => x.Timestamp)) { if (segment != p.Segment) { // create new segments as needed tracksegmentNode = _xml.CreateElement("trkseg", Namespace); trk.AppendChild(tracksegmentNode); segment = p.Segment; } // add points to segments var pointNode = _xml.CreateElement("trkpt", Namespace); tracksegmentNode.AppendChild(pointNode); SetPoint(pointNode, p); } }
private static dynamic BuildTrack(IGpxTrack track) { dynamic t = new JObject(); t.track = track.Name; t.points = new JArray(); foreach (var point in track.Points) { dynamic p = new JObject(); p.lat = point.Latitude; p.lng = point.Longitude; //p.ele = point.Elevation; t.points.Add(p); } return(t); }
public void WriteTrack(IGpxTrack track) { // create header if needed if (_xml == null) { WriteHeader(track.Name, track.Description); } // create placemark var pm = _xml.CreateElement("Placemark", null); _xml.DocumentElement.FirstChild.AppendChild(pm); // add details if (!String.IsNullOrWhiteSpace(track.Name)) { var nameNode = _xml.CreateElement("name", null); pm.AppendChild(nameNode); nameNode.InnerText = track.Name; } if (!String.IsNullOrWhiteSpace(track.Description)) { var descriptionNode = _xml.CreateElement("description", null); pm.AppendChild(descriptionNode); descriptionNode.InnerText = track.Description; } // create track var trackNode = _xml.CreateElement("gx:Track", Namespace); pm.AppendChild(trackNode); // add points foreach (var p in track.Points.OrderBy(x => x.Segment).ThenBy(x => x.Timestamp)) { var whenNode = _xml.CreateElement("when", null); trackNode.AppendChild(whenNode); whenNode.InnerText = p.Timestamp.Value.ToUniversalTime().ToString("s") + "Z"; var pointNode = _xml.CreateElement("gx:coord", Namespace); trackNode.AppendChild(pointNode); pointNode.InnerText = $"{p.Longitude} {p.Latitude} {p.Elevation}".TrimEnd(); } }
// ================================================== // IGpxTrack public static HtmlString GetJson(IGpxTrack track) { var t = BuildTrack(track); return(new HtmlString(t.ToString())); }
public TopoTrackInfo(TopoTrailInfo trail, IGpxTrack track) { _trail = trail; _track = track; _points = track.Points.Select(x => new TopoPointInfo(this, x)).ToList(); }