public string ToXmlString() { GpxClass gpx = new GpxClass() { creator = "Blue Diamond", trk = new trkTypeCollection() }; trkType track = new trkType() { name = Name, }; track.trkseg = new trksegTypeCollection(); trksegType segment = new trksegType() { trkpt = new wptTypeCollection() }; track.trkseg.Add(segment); foreach(var pt in this.Points) { wptType wpt = new wptType() { lat = (decimal)pt.Latitude, lon = (decimal)pt.Longitude, ele = (decimal)pt.Altitude, eleSpecified = true, time = pt.TimeStamp, }; segment.trkpt.Add(wpt); } gpx.trk.Add(track); try { var gpx11 = ToGpx1_1(gpx); XmlSerializer serializer = new XmlSerializer(gpx11.GetType()); Utf8StringWriter sw = new Utf8StringWriter(); serializer.Serialize(sw, gpx11); return sw.ToString(); } catch (Exception ex) { Trace.TraceError("error serializing:\r\n{0}",ex); return null; } //return gpx.ToXml(); }
private static trksegType ReadTrackSegment( XElement element ) { element.RequireArgument<XElement>( "element" ).NotNull<XElement>(); XNamespace ns = element.Name.Namespace; trksegType trkseg = new trksegType(); if( element.Element( ns + "trkpt" ) != null ) trkseg.trkpt = ReadWayPoints(element.Elements( ns + "trkpt" ) ); //Ignore the extensions return trkseg; }
private trkType[] CreateTracksFromMultiLineString(IFeature multiLineStringFeature) { var multiLineString = multiLineStringFeature.Geometry as MultiLineString; if (multiLineString == null) { return new trkType[0]; } var name = GetFeatureName(multiLineStringFeature); var tracks = new List<trkType>(); var currentTrack = new trkType { name = name, trkseg = new trksegType[0]}; foreach (var lineString in multiLineString.Geometries.OfType<ILineString>().Where(ls => ls.Coordinates.Any())) { var currentSegment = new trksegType { trkpt = lineString.Coordinates.Select(p => CreateWayPoint(p, null)).ToArray() }; if (currentTrack.trkseg.Length == 0) { currentTrack.trkseg = new[] {currentSegment}; continue; } var lastPointInTrack = currentTrack.trkseg.Last().trkpt.Last(); var firstPointInSegment = currentSegment.trkpt.First(); if (lastPointInTrack.lat == firstPointInSegment.lat && lastPointInTrack.lon == firstPointInSegment.lon) { var list = currentTrack.trkseg.ToList(); list.Add(currentSegment); currentTrack.trkseg = list.ToArray(); } else { // need to start a new track. tracks.Add(currentTrack); currentTrack = new trkType {name = name, trkseg = new[] {currentSegment}}; } } tracks.Add(currentTrack); return tracks.ToArray(); }
/// <summary> /// Saves the route to a gpx file. /// </summary> /// <param name="file"></param> /// <param name="route"></param> internal static void Save(FileInfo file, OsmSharpRoute route) { XmlFileSource source = new XmlFileSource(file); GpxDocument output_document = new GpxDocument(source); gpxType output_gpx = new gpxType(); output_gpx.trk = new trkType[1]; // initialize all objects. List <wptType> segments = new List <wptType>(); trkType track = new trkType(); List <wptType> poi_gpx = new List <wptType>(); track.trkseg = new trksegType[1]; // ============= CONSTRUCT TRACK SEGMENT ============== trksegType track_segment = new trksegType(); // loop over all points. for (int idx = 0; idx < route.Entries.Length; idx++) { // get the current entry. RoutePointEntry entry = route.Entries[idx]; // ================== INITIALIZE A NEW SEGMENT IF NEEDED! ======== wptType waypoint; if (entry.Points != null) { // loop over all points and create a waypoint for each. for (int p_idx = 0; p_idx < entry.Points.Length; p_idx++) { RoutePoint point = entry.Points[p_idx]; waypoint = new wptType(); waypoint.lat = (decimal)point.Latitude; waypoint.lon = (decimal)point.Longitude; waypoint.name = point.Name; poi_gpx.Add(waypoint); } } // insert poi's. double longitde = entry.Longitude; double latitude = entry.Latitude; waypoint = new wptType(); waypoint.lat = (decimal)entry.Latitude; waypoint.lon = (decimal)entry.Longitude; segments.Add(waypoint); } // put the segment in the track. track_segment.trkpt = segments.ToArray(); track.trkseg[0] = track_segment; // set the track to the output. output_gpx.trk[0] = track; output_gpx.wpt = poi_gpx.ToArray(); // save the ouput. output_document.Gpx = output_gpx; output_document.Save(); }