diff --git a/src/main/java/de/dennisguse/opentracks/io/file/exporter/GpxTrackWriter.java b/src/main/java/de/dennisguse/opentracks/io/file/exporter/GpxTrackWriter.java index b5e84d4d5..7d3ca6b9c 100644 --- a/src/main/java/de/dennisguse/opentracks/io/file/exporter/GpxTrackWriter.java +++ b/src/main/java/de/dennisguse/opentracks/io/file/exporter/GpxTrackWriter.java @@ -38,6 +38,8 @@ public class GpxTrackWriter implements TrackWriter { private static final NumberFormat ELEVATION_FORMAT = NumberFormat.getInstance(Locale.US); private static final NumberFormat COORDINATE_FORMAT = NumberFormat.getInstance(Locale.US); + private static final NumberFormat HEARTRATE_FORMAT = NumberFormat.getInstance(Locale.US); + private static final NumberFormat CADENCE_FORMAT = NumberFormat.getInstance(Locale.US); static { /* @@ -50,6 +52,12 @@ public class GpxTrackWriter implements TrackWriter { COORDINATE_FORMAT.setMaximumFractionDigits(6); COORDINATE_FORMAT.setMaximumIntegerDigits(3); COORDINATE_FORMAT.setGroupingUsed(false); + + HEARTRATE_FORMAT.setMaximumFractionDigits(1); + HEARTRATE_FORMAT.setGroupingUsed(false); + + CADENCE_FORMAT.setMaximumFractionDigits(1); + CADENCE_FORMAT.setGroupingUsed(false); } private final String creator; @@ -85,7 +93,8 @@ public class GpxTrackWriter implements TrackWriter { printWriter.println("xsi:schemaLocation=\"http://www.topografix.com/GPX/1/1" + " http://www.topografix.com/GPX/1/1/gpx.xsd" + " http://www.topografix.com/GPX/Private/TopoGrafix/0/1" - + " http://www.topografix.com/GPX/Private/TopoGrafix/0/1/topografix.xsd\">"); + + " http://www.topografix.com/GPX/Private/TopoGrafix/0/1/topografix.xsd\""); + printWriter.println("xmlns:gpxtpx=\"http://www.garmin.com/xmlschemes/TrackPointExtension/v1\">"); printWriter.println(""); Track track = tracks[0]; printWriter.println("" + StringUtils.formatCData(track.getName()) + ""); @@ -171,9 +180,21 @@ public class GpxTrackWriter implements TrackWriter { public void writeTrackPoint(TrackPoint trackPoint) { if (printWriter != null) { printWriter.println(""); - if (trackPoint.hasAltitude()) { - printWriter.println("" + ELEVATION_FORMAT.format(trackPoint.getAltitude()) + ""); + if (trackPoint.hasAltitude()) { printWriter.println("" + ELEVATION_FORMAT.format(trackPoint.getAltitude()) + ""); } + + if (trackPoint.hasHeartRate() || trackPoint.hasCyclingCadence()) { + printWriter.println(""); + if (trackPoint.hasHeartRate()) { + printWriter.println("" + HEARTRATE_FORMAT.format(trackPoint.getHeartRate_bpm()) + ""); + } + + if (trackPoint.hasCyclingCadence()) { + printWriter.println("" + HEARTRATE_FORMAT.format(trackPoint.getCyclingCadence_rpm()) + ""); + } + + printWriter.println(""); } + printWriter.println( ""); printWriter.println("" + trackPoint.getSpeed() + ""); diff --git a/src/main/java/de/dennisguse/opentracks/io/file/importer/GpxFileTrackImporter.java b/src/main/java/de/dennisguse/opentracks/io/file/importer/GpxFileTrackImporter.java index 897d445a7..7374d677e 100644 --- a/src/main/java/de/dennisguse/opentracks/io/file/importer/GpxFileTrackImporter.java +++ b/src/main/java/de/dennisguse/opentracks/io/file/importer/GpxFileTrackImporter.java @@ -40,6 +40,7 @@ public class GpxFileTrackImporter extends AbstractFileTrackImporter { private static final String TAG_NAME = "name"; private static final String TAG_TIME = "time"; private static final String TAG_SPEED = "speed"; + private static final String TAG_HEARTRATE = "gpx:hr"; private static final String TAG_TRACK = "trk"; private static final String TAG_TRACK_POINT = "trkpt"; private static final String TAG_TRACK_SEGMENT = "trkseg"; @@ -120,6 +121,10 @@ public class GpxFileTrackImporter extends AbstractFileTrackImporter { if (content != null) { speed = content.trim(); } + case TAG_HEARTRATE: + if (content != null) { + heartrate = content.trim(); + } break; case TAG_ELEVATION: if (content != null) {