public void GpxReadv1_1Test() { // instantiate and load the gpx test document. XmlStreamSource source = new XmlStreamSource( Assembly.GetExecutingAssembly().GetManifestResourceStream("OsmSharp.Test.Unittests.test.v1.1.gpx")); GpxDocument document = new GpxDocument(source); object gpx = document.Gpx; if (gpx is OsmSharp.Xml.Gpx.v1_1.gpxType) { // all ok here! OsmSharp.Xml.Gpx.v1_1.gpxType gpx_type = (gpx as OsmSharp.Xml.Gpx.v1_1.gpxType); // test the gpx test file content. Assert.IsNotNull(gpx_type.trk, "Gpx has no track!"); Assert.AreEqual(gpx_type.trk[0].trkseg.Length, 1, "Not the correct number of track segments found!"); } else { Assert.Fail("No gpx data was read, or data was of the incorrect type!"); } document.Close(); source.Close(); }
/// <summary> /// Reads the actual Gpx. /// </summary> private void DoReadGpx() { // seek to the beginning of the stream. if (_stream.CanSeek) { _stream.Seek(0, SeekOrigin.Begin); } // instantiate and load the gpx test document. XmlStreamSource source = new XmlStreamSource(_stream); GpxDocument document = new GpxDocument(source); object gpx = document.Gpx; switch(document.Version) { case GpxVersion.Gpxv1_0: this.ReadGpxv1_0(gpx as OsmSharp.Xml.Gpx.v1_0.gpx); break; case GpxVersion.Gpxv1_1: this.ReadGpxv1_1(gpx as Xml.Gpx.v1_1.gpxType); break; } }
/// <summary> /// Saves the route to a gpx file. /// </summary> /// <param name="file"></param> /// <param name="route"></param> internal static void Save(FileInfo file, Route 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(); }
public void GpxWritev1_1Test() { // instantiate and load the gpx test document. XmlStreamSource source = new XmlStreamSource( Assembly.GetExecutingAssembly().GetManifestResourceStream("OsmSharp.Test.Unittests.test.v1.1.gpx")); GpxDocument document = new GpxDocument(source); object gpx = document.Gpx; if (gpx is OsmSharp.Xml.Gpx.v1_1.gpxType) { // all ok here! // get the target file. MemoryStream write_file = new MemoryStream(); // create a new xml source. XmlStreamSource write_source = new XmlStreamSource(write_file); GpxDocument gpx_target = new GpxDocument(write_source); // set the target data the same as the source document. gpx_target.Gpx = gpx; // save the data. gpx_target.Save(); // close the old document. document.Close(); source.Close(); // check to see if the data was writter correctly. // instantiate and load the gpx test document. source = new XmlStreamSource(write_file); document = new GpxDocument(source); gpx = document.Gpx; if (gpx is OsmSharp.Xml.Gpx.v1_1.gpxType) { // all ok here! OsmSharp.Xml.Gpx.v1_1.gpxType gpx_type = (gpx as OsmSharp.Xml.Gpx.v1_1.gpxType); // test the gpx test file content. Assert.IsNotNull(gpx_type.trk, "Gpx has not track!"); Assert.AreEqual(gpx_type.trk[0].trkseg.Length, 1, "Not the correct number of track segments found!"); } else { Assert.Fail("No gpx data was read, or data was of the incorrect type!"); } } else { Assert.Fail("No gpx data was read, or data was of the incorrect type!"); } document.Close(); source.Close(); }