Exemplo n.º 1
0
        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();
        }
Exemplo n.º 2
0
        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;
        }
Exemplo n.º 3
0
 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();
 }
Exemplo n.º 4
0
        /// <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();
        }