public static (string, float) GPXtoRoute(rteType route) { if (route.GetGarminExt() != null) { Console.WriteLine("Route '{0}' has Garmin extension", route.name); /**/ //Read Garmin's extended routing attributes //var a = route.GetGarminExt(); } string mapRoute = "LINESTRING("; float mapDistanceKm = 0; for (int i = 0; i < route.rtept.Count; i++) { //WayPoint if (!(mapRoute.Equals("LINESTRING("))) { mapRoute += ","; } mapRoute += route.rtept[i].lat.ToString() + " " + route.rtept[i].lon.ToString(); //Calculate Distance if (i >= 1) { mapDistanceKm += (float)Distance((float)route.rtept[i - 1].lat, (float)route.rtept[i - 1].lon, (float)route.rtept[i].lat, (float)route.rtept[i].lon, 'K'); } /**///Calculate ascent / descent data } mapRoute += ")"; return(mapRoute, mapDistanceKm); }
public override GpxModel clone() { GpxRouteModel newModel = null; rteType rte = (rteType)Route.Clone(); if (rte != null) { newModel = new GpxRouteModel(null, rte); } return(newModel); }
private List<RouteData> ConvertRoutesToRoutesData(rteType[] routes) { var routesData = routes.Where(r => r.rtept != null && r.rtept.Any()).Select(route => new RouteData { name = route.name, segments = new List<RouteSegmentData> { new RouteSegmentData { latlngzs = route.rtept.Select(ToLatLngZ).ToList(), routePoint = ToLatLngZ(route.rtept.Last()) } } }).ToList(); return routesData; }
internal void Save(IEnumerable <wptType> waypoints, string fileName = null) { var gpxFile = new GPXFile(); var gpx = new gpxType(); var rte = new rteType(); rte.name = Title.Trim(); rte.rtept = ToRoute().Points.ToArray(); gpx.rte = new List <rteType>() { rte }.ToArray(); gpx.wpt = waypoints.ToArray(); var fileNameToSave = string.IsNullOrEmpty(fileName) ? FileName : fileName; gpxFile.Save(fileNameToSave, gpx); IsInEditMode = false; }
public static Stream ExportGpxRouteStream(IList <GlobalsatRoute> routes) { if (routes == null) { return(null); } gpxType gpxFile = new gpxType(); //gpxFile.creator = "SportTracks KeymazePlugin"; List <rteType> rtes = new List <rteType>(); if (routes != null && routes.Count > 0) { foreach (GlobalsatRoute route in routes) { if (route.wpts != null && route.wpts.Count > 0) { rteType rte = new rteType(); rte.name = route.Name; List <wptType> wpts = new List <wptType>(); foreach (GlobalsatWaypoint g in route.wpts) { wptType wpt = new wptType(); wpt.lat = (decimal)g.Latitude; wpt.lon = (decimal)g.Longitude; wpt.ele = g.Altitude; wpt.eleSpecified = true; wpts.Add(wpt); } rte.rtept = wpts.ToArray(); rtes.Add(rte); } } } gpxFile.rte = rtes.ToArray(); XmlSerializer serializer = new XmlSerializer(gpxFile.GetType()); Stream writer = new MemoryStream(); serializer.Serialize(writer, gpxFile); //writer.Close(); return(writer); }
private void SaveSplitRoute(BikeTouringGISLayer obj) { var baseDirectory = Path.GetDirectoryName(obj.FileName); int i = 1; foreach (var splitRoute in obj.SplitRoutes) { var filename = string.Format(@"{0}\{1}_{2}.gpx", baseDirectory, obj.SplitPrefix, i); var gpxFile = new GPXFile(); var gpx = new gpxType(); var rte = new rteType(); rte.name = $"{i}_{obj.SplitPrefix}"; rte.rtept = splitRoute.Points.ToArray(); gpx.rte = new List <rteType>() { rte }.ToArray(); gpxFile.Save(filename, gpx); i++; } }
public GpxRouteModel(GpxModel parent, rteType rte) { Parent = parent; if (rte == null) { Route = new rteType(); Route.name = "New Route"; } else { Route = rte; } Waypoints = new List <GpxWaypointModel>(); if (Route.rtept != null) { foreach (wptType wpt in Route.rtept) { Waypoints.Add(new GpxWaypointModel(this, wpt)); } } }
public static IDictionary<string, object> LoadRouteAttributes( rteType rte, IDictionary<string, object> attributes ) { rte.RequireArgument<rteType>( "rte" ).NotNull<rteType>(); attributes.RequireArgument<IDictionary<string, object>>( "attributes" ).NotNull<IDictionary<string, object>>(); attributes.Add( "name", rte.name ); attributes.Add( "cmt", rte.cmt ); attributes.Add( "desc", rte.desc ); attributes.Add( "src", rte.src ); attributes.Add( "link", rte.link ); attributes.Add( "number", rte.number ); attributes.Add( "type", rte.type ); return attributes; }
private static rteType ReadRoute( XElement element ) { element.RequireArgument<XElement>( "element" ).NotNull<XElement>(); XNamespace ns = element.Name.Namespace; rteType rte = new rteType(); if( element.Element( ns + "name" ) != null ) rte.name = element.Element( ns + "name" ).Value; if( element.Element( ns + "cmt" ) != null ) rte.cmt = element.Element( ns + "cmt" ).Value; if( element.Element( ns + "desc" ) != null ) rte.desc = element.Element( ns + "desc" ).Value; if( element.Element( ns + "src" ) != null ) rte.src = element.Element( ns + "src" ).Value; if( element.Element( ns + "link" ) != null ) rte.link = ReadLinks(element.Elements(ns + "link" ) ); if( element.Element( ns + "number" ) != null ) rte.number = element.Element( ns + "number" ).Value; if( element.Element( ns + "type" ) != null ) rte.type = element.Element( ns + "type" ).Value; //Ignore the extensions if( element.Element( ns + "rtept" ) != null ) rte.rtept = ReadWayPoints(element.Elements( ns + "rtept" ) ); return rte; }
public void WriteGpxData(GpxFile gpxFile, string fileName) { gpxType gpx = new gpxType(); List <trkType> destTracks = new List <trkType>(); // tracks foreach (Track track in gpxFile.Tracks) { List <trksegType> destSegments = new List <trksegType>(); foreach (TrackSegment segment in track.Segments) { trksegType destSegment = new trksegType(); List <wptType> destWaypoints = new List <wptType>(); foreach (TrackPoint point in segment.Points) { destWaypoints.Add(SaveTrackPoint(point)); } destSegment.trkpt = destWaypoints.ToArray(); destSegments.Add(destSegment); } if (destSegments.Count > 0) { trkType destTrack = new trkType(); destTrack.trkseg = destSegments.ToArray(); destTracks.Add(destTrack); } } if (destTracks.Count > 0) { gpx.trk = destTracks.ToArray(); } // waypoints List <wptType> destWaypoints2 = new List <wptType>(); foreach (TrackPoint waypoint in gpxFile.Waypoints) { destWaypoints2.Add(SaveTrackPoint(waypoint)); } if (destWaypoints2.Count > 0) { gpx.wpt = destWaypoints2.ToArray(); } // routes List <rteType> destRoutes = new List <rteType>(); foreach (Track route in gpxFile.Routes) { List <wptType> destRoutePoints = new List <wptType>(); foreach (TrackSegment segment in route.Segments) { foreach (TrackPoint routePoint in segment.Points) { destRoutePoints.Add(SaveTrackPoint(routePoint)); } } if (destRoutePoints.Count > 0) { rteType destRoute = new rteType(); destRoute.rtept = destRoutePoints.ToArray(); destRoutes.Add(destRoute); } } if (destRoutes.Count > 0) { gpx.rte = destRoutes.ToArray(); } using (FileStream stream = File.Open(fileName, FileMode.Create)) { XmlSerializer serializer = new XmlSerializer(typeof(gpxType)); serializer.Serialize(stream, gpx); } }