Skip to content

Commit ef3ab70

Browse files
authored
Merge pull request #102 from tpikonen/gpx10
Write speed to GPX 1.0 files
2 parents a2a63b6 + b7aeb06 commit ef3ab70

File tree

2 files changed

+20
-9
lines changed

2 files changed

+20
-9
lines changed

CHANGELOG.md

+4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# CHANGELOG
22

3+
## Unreleased
4+
5+
- [#101](https://github.com/georust/gpx/pull/101): Write speed to GPX 1.0 files
6+
37
## 0.10.0
48

59
- [#100](https://github.com/georust/gpx/pull/100): Add write examples to `README.md`

src/writer.rs

+16-9
Original file line numberDiff line numberDiff line change
@@ -70,13 +70,13 @@ pub fn write_with_event_writer<W: Write>(gpx: &Gpx, writer: &mut EventWriter<W>)
7070
)?;
7171
write_metadata(gpx, writer)?;
7272
for point in &gpx.waypoints {
73-
write_waypoint("wpt", point, writer)?;
73+
write_waypoint(gpx.version, "wpt", point, writer)?;
7474
}
7575
for track in &gpx.tracks {
76-
write_track(track, writer)?;
76+
write_track(gpx.version, track, writer)?;
7777
}
7878
for route in &gpx.routes {
79-
write_route(route, writer)?;
79+
write_route(gpx.version, route, writer)?;
8080
}
8181
write_xml_event(XmlEvent::end_element(), writer)?;
8282
Ok(())
@@ -293,7 +293,7 @@ fn write_fix_if_exists<W: Write>(fix: &Option<Fix>, writer: &mut EventWriter<W>)
293293
Ok(())
294294
}
295295

296-
fn write_track<W: Write>(track: &Track, writer: &mut EventWriter<W>) -> GpxResult<()> {
296+
fn write_track<W: Write>(version: GpxVersion, track: &Track, writer: &mut EventWriter<W>) -> GpxResult<()> {
297297
write_xml_event(XmlEvent::start_element("trk"), writer)?;
298298
write_string_if_exists("name", &track.name, writer)?;
299299
write_string_if_exists("cmt", &track.comment, writer)?;
@@ -304,13 +304,13 @@ fn write_track<W: Write>(track: &Track, writer: &mut EventWriter<W>) -> GpxResul
304304
}
305305
write_string_if_exists("type", &track.type_, writer)?;
306306
for segment in &track.segments {
307-
write_track_segment(segment, writer)?;
307+
write_track_segment(version, segment, writer)?;
308308
}
309309
write_xml_event(XmlEvent::end_element(), writer)?;
310310
Ok(())
311311
}
312312

313-
fn write_route<W: Write>(route: &Route, writer: &mut EventWriter<W>) -> GpxResult<()> {
313+
fn write_route<W: Write>(version: GpxVersion, route: &Route, writer: &mut EventWriter<W>) -> GpxResult<()> {
314314
write_xml_event(XmlEvent::start_element("rte"), writer)?;
315315
write_string_if_exists("name", &route.name, writer)?;
316316
write_string_if_exists("cmt", &route.comment, writer)?;
@@ -322,25 +322,27 @@ fn write_route<W: Write>(route: &Route, writer: &mut EventWriter<W>) -> GpxResul
322322
write_value_if_exists("number", &route.number, writer)?;
323323
write_string_if_exists("type", &route.type_, writer)?;
324324
for point in &route.points {
325-
write_waypoint("rtept", point, writer)?;
325+
write_waypoint(version, "rtept", point, writer)?;
326326
}
327327
write_xml_event(XmlEvent::end_element(), writer)?;
328328
Ok(())
329329
}
330330

331331
fn write_track_segment<W: Write>(
332+
version: GpxVersion,
332333
segment: &TrackSegment,
333334
writer: &mut EventWriter<W>,
334335
) -> GpxResult<()> {
335336
write_xml_event(XmlEvent::start_element("trkseg"), writer)?;
336337
for point in &segment.points {
337-
write_waypoint("trkpt", point, writer)?;
338+
write_waypoint(version, "trkpt", point, writer)?;
338339
}
339340
write_xml_event(XmlEvent::end_element(), writer)?;
340341
Ok(())
341342
}
342343

343344
fn write_waypoint<W: Write>(
345+
version: GpxVersion,
344346
tagname: &str,
345347
waypoint: &Waypoint,
346348
writer: &mut EventWriter<W>,
@@ -352,7 +354,12 @@ fn write_waypoint<W: Write>(
352354
writer,
353355
)?;
354356
write_value_if_exists("ele", &waypoint.elevation, writer)?;
355-
// TODO: write speed if GPX version == 1.0
357+
match version {
358+
GpxVersion::Gpx10 => {
359+
write_value_if_exists("speed", &waypoint.speed, writer)?;
360+
}
361+
_ => {}
362+
}
356363
write_time_if_exists(&waypoint.time, writer)?;
357364
write_value_if_exists("geoidheight", &waypoint.geoidheight, writer)?;
358365
write_string_if_exists("name", &waypoint.name, writer)?;

0 commit comments

Comments
 (0)