示例#1
0
        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);
        }
示例#2
0
        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;
 }
示例#4
0
        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);
        }
示例#6
0
        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++;
            }
        }
示例#7
0
 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));
         }
     }
 }
示例#8
0
        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;
        }
示例#9
0
        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;
        }
示例#10
0
        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);
            }
        }