protected string SerializeToHereFormat(RouteDataDTO route)
        {
            var gpx = new gpxType();

            gpx.trk = new trkType[1];
            var trk = gpx.trk[0] = new trkType();

            trk.trkseg = new trksegType[1];
            var seg = trk.trkseg[0] = new trksegType();

            seg.trkpt = route.Points.Select(x => new wptType()
            {
                lat = x.latitude,
                lon = x.longitude
            }).ToArray();


            XmlSerializerNamespaces ns = new XmlSerializerNamespaces(); ns.Add("", "");

            var serializer = new XmlSerializer(gpx.GetType());

            using (StringWriter textWriter = new StringWriter())
                using (XmlWriter writer = XmlWriter.Create(textWriter, new XmlWriterSettings {
                    OmitXmlDeclaration = true
                }))
                {
                    serializer.Serialize(writer, gpx);
                    var str            = textWriter.ToString();
                    var plainTextBytes = System.Text.Encoding.UTF8.GetBytes(str);
                    return(System.Convert.ToBase64String(plainTextBytes));
                }
        }
        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);
        }
        public static Stream ExportGpxWaypointsStream(IList <GlobalsatWaypoint> waypoints)
        {
            if (waypoints == null)
            {
                return(null);
            }
            gpxType gpxFile = new gpxType();
            //gpxFile.creator = "SportTracks KeymazePlugin";

            List <wptType> wptList = new List <wptType>();

            if (waypoints != null && waypoints.Count > 0)
            {
                foreach (GlobalsatWaypoint waypoint in waypoints)
                {
                    wptType wpt = new wptType();
                    wpt.name         = waypoint.WaypointName;
                    wpt.lat          = (decimal)waypoint.Latitude;
                    wpt.lon          = (decimal)waypoint.Longitude;
                    wpt.ele          = (decimal)waypoint.Altitude;
                    wpt.eleSpecified = true;
                    wpt.type         = waypoint.IconNr.ToString();

                    wptList.Add(wpt);
                }
            }

            gpxFile.wpt = wptList.ToArray();

            XmlSerializer serializer = new XmlSerializer(gpxFile.GetType());

            Stream writer = new MemoryStream();

            serializer.Serialize(writer, gpxFile);
            //writer.Close();
            return(writer);
        }