forked from upstream-mirrors/OpenTracks
+4
-4
@@ -301,7 +301,7 @@ public class ExportImportTest {
|
|||||||
trackPointsWithCoordinates.get(0).setType(TrackPoint.Type.SEGMENT_START_AUTOMATIC);
|
trackPointsWithCoordinates.get(0).setType(TrackPoint.Type.SEGMENT_START_AUTOMATIC);
|
||||||
trackPointsWithCoordinates.get(3).setType(TrackPoint.Type.SEGMENT_START_AUTOMATIC);
|
trackPointsWithCoordinates.get(3).setType(TrackPoint.Type.SEGMENT_START_AUTOMATIC);
|
||||||
|
|
||||||
assertTrackpoints(trackPointsWithCoordinates, false, true, true, true, true);
|
assertTrackpoints(trackPointsWithCoordinates, true, true, true, true, true);
|
||||||
|
|
||||||
// 3. trackstatistics
|
// 3. trackstatistics
|
||||||
assertTrackStatistics(true, true);
|
assertTrackStatistics(true, true);
|
||||||
@@ -391,13 +391,13 @@ public class ExportImportTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (verifyHeartrate) {
|
if (verifyHeartrate) {
|
||||||
assertEquals(trackPoint.getHeartRate_bpm(), importedTrackPoint.getHeartRate_bpm(), 0.01);
|
assertEquals("" + trackPoint, trackPoint.getHeartRate_bpm(), importedTrackPoint.getHeartRate_bpm(), 0.01);
|
||||||
}
|
}
|
||||||
if (verifyCadence) {
|
if (verifyCadence) {
|
||||||
assertEquals(trackPoint.getCyclingCadence_rpm(), importedTrackPoint.getCyclingCadence_rpm(), 0.01);
|
assertEquals("" + trackPoint, trackPoint.getCyclingCadence_rpm(), importedTrackPoint.getCyclingCadence_rpm(), 0.01);
|
||||||
}
|
}
|
||||||
if (verifyPower) {
|
if (verifyPower) {
|
||||||
assertEquals(trackPoint.getPower(), importedTrackPoint.getPower(), 0.01);
|
assertEquals("" + trackPoint, trackPoint.getPower(), importedTrackPoint.getPower(), 0.01);
|
||||||
}
|
}
|
||||||
if (verifyElevationGain) {
|
if (verifyElevationGain) {
|
||||||
assertEquals(trackPoint.getElevationGain(), importedTrackPoint.getElevationGain(), 0.01);
|
assertEquals(trackPoint.getElevationGain(), importedTrackPoint.getElevationGain(), 0.01);
|
||||||
|
|||||||
@@ -51,6 +51,7 @@ public class GPXTrackExporter implements TrackExporter {
|
|||||||
private static final NumberFormat SPEED_FORMAT = NumberFormat.getInstance(Locale.US);
|
private static final NumberFormat SPEED_FORMAT = NumberFormat.getInstance(Locale.US);
|
||||||
private static final NumberFormat HEARTRATE_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);
|
private static final NumberFormat CADENCE_FORMAT = NumberFormat.getInstance(Locale.US);
|
||||||
|
private static final NumberFormat POWER_FORMAT = NumberFormat.getInstance(Locale.US);
|
||||||
|
|
||||||
static {
|
static {
|
||||||
/*
|
/*
|
||||||
@@ -72,6 +73,9 @@ public class GPXTrackExporter implements TrackExporter {
|
|||||||
|
|
||||||
CADENCE_FORMAT.setMaximumFractionDigits(0);
|
CADENCE_FORMAT.setMaximumFractionDigits(0);
|
||||||
CADENCE_FORMAT.setGroupingUsed(false);
|
CADENCE_FORMAT.setGroupingUsed(false);
|
||||||
|
|
||||||
|
POWER_FORMAT.setMaximumFractionDigits(0);
|
||||||
|
POWER_FORMAT.setGroupingUsed(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
private final ContentProviderUtils contentProviderUtils;
|
private final ContentProviderUtils contentProviderUtils;
|
||||||
@@ -196,10 +200,12 @@ public class GPXTrackExporter implements TrackExporter {
|
|||||||
printWriter.println("xmlns:atom=\"http://www.w3.org/2005/Atom\"");
|
printWriter.println("xmlns:atom=\"http://www.w3.org/2005/Atom\"");
|
||||||
printWriter.println("xmlns:opentracks=\"http://opentracksapp.com/xmlschemas/v1\"");
|
printWriter.println("xmlns:opentracks=\"http://opentracksapp.com/xmlschemas/v1\"");
|
||||||
printWriter.println("xmlns:gpxtpx=\"http://www.garmin.com/xmlschemes/TrackPointExtension/v2\"");
|
printWriter.println("xmlns:gpxtpx=\"http://www.garmin.com/xmlschemes/TrackPointExtension/v2\"");
|
||||||
|
printWriter.println("xmlns:pwr=\"http://www.garmin.com/xmlschemas/PowerExtension/v1\"");
|
||||||
printWriter.println("xsi:schemaLocation=" +
|
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/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 http://www.topografix.com/GPX/Private/TopoGrafix/0/1/topografix.xsd"
|
||||||
+ " http://www.garmin.com/xmlschemas/TrackPointExtension/v2 https://www8.garmin.com/xmlschemas/TrackPointExtensionv2.xsd"
|
+ " http://www.garmin.com/xmlschemas/TrackPointExtension/v2 https://www8.garmin.com/xmlschemas/TrackPointExtensionv2.xsd"
|
||||||
|
+ " http://www.garmin.com/xmlschemas/PowerExtension/v1 https://www8.garmin.com/xmlschemas/PowerExtensionv1.xsd"
|
||||||
+ " http://opentracksapp.com/xmlschemas/v1 http://opentracksapp.com/xmlschemas/OpenTracks_v1.xsd\">");
|
+ " http://opentracksapp.com/xmlschemas/v1 http://opentracksapp.com/xmlschemas/OpenTracks_v1.xsd\">");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -294,6 +300,10 @@ public class GPXTrackExporter implements TrackExporter {
|
|||||||
printWriter.println("<gpxtpx:cad>" + CADENCE_FORMAT.format(trackPoint.getCyclingCadence_rpm()) + "</gpxtpx:cad>");
|
printWriter.println("<gpxtpx:cad>" + CADENCE_FORMAT.format(trackPoint.getCyclingCadence_rpm()) + "</gpxtpx:cad>");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (trackPoint.hasPower()) {
|
||||||
|
printWriter.println("<pwr:PowerInWatts>" + POWER_FORMAT.format(trackPoint.getPower()) + "</pwr:PowerInWatts>");
|
||||||
|
}
|
||||||
|
|
||||||
if (trackPoint.hasElevationGain()) {
|
if (trackPoint.hasElevationGain()) {
|
||||||
printWriter.println("<opentracks:gain>" + ELEVATION_FORMAT.format(trackPoint.getElevationGain()) + "</opentracks:gain>");
|
printWriter.println("<opentracks:gain>" + ELEVATION_FORMAT.format(trackPoint.getElevationGain()) + "</opentracks:gain>");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -479,6 +479,14 @@ abstract class AbstractFileTrackImporter extends DefaultHandler implements Track
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (power != null) {
|
||||||
|
try {
|
||||||
|
trackPoint.setPower(Float.parseFloat(power));
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new ParsingException(createErrorMessage(String.format(Locale.US, "Unable to parse power: %s", power)), e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (gain != null) {
|
if (gain != null) {
|
||||||
try {
|
try {
|
||||||
trackPoint.setElevationGain(Float.parseFloat(gain));
|
trackPoint.setElevationGain(Float.parseFloat(gain));
|
||||||
|
|||||||
@@ -28,7 +28,9 @@ import de.dennisguse.opentracks.content.provider.ContentProviderUtils;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Imports a GPX file.
|
* Imports a GPX file.
|
||||||
* Uses https://www8.garmin.com/xmlschemas/TrackPointExtensionv2.xsd
|
* Uses:
|
||||||
|
* * https://www8.garmin.com/xmlschemas/TrackPointExtensionv2.xsd
|
||||||
|
* * https://www8.garmin.com/xmlschemas/PowerExtensionv1.xsd
|
||||||
* <p>
|
* <p>
|
||||||
* {@link de.dennisguse.opentracks.io.file.exporter.GPXTrackExporter} does not export information if a segment was started automatic or manually.
|
* {@link de.dennisguse.opentracks.io.file.exporter.GPXTrackExporter} does not export information if a segment was started automatic or manually.
|
||||||
* Therefore, all segments starts are marked as SEGMENT_START_AUTOMATIC.
|
* Therefore, all segments starts are marked as SEGMENT_START_AUTOMATIC.
|
||||||
@@ -57,6 +59,7 @@ public class GpxFileTrackImporter extends AbstractFileTrackImporter {
|
|||||||
private static final String TAG_EXTENSION_SPEED = "gpxtpx:speed";
|
private static final String TAG_EXTENSION_SPEED = "gpxtpx:speed";
|
||||||
private static final String TAG_EXTENSION_HEARTRATE = "gpxtpx:hr";
|
private static final String TAG_EXTENSION_HEARTRATE = "gpxtpx:hr";
|
||||||
private static final String TAG_EXTENSION_CADENCE = "gpxtpx:cad";
|
private static final String TAG_EXTENSION_CADENCE = "gpxtpx:cad";
|
||||||
|
private static final String TAG_EXTENSION_POWER = "pwr:PowerInWatts";
|
||||||
|
|
||||||
private static final String TAG_EXTENSION_GAIN = "opentracks:gain";
|
private static final String TAG_EXTENSION_GAIN = "opentracks:gain";
|
||||||
private static final String TAG_EXTENSION_LOSS = "opentracks:loss";
|
private static final String TAG_EXTENSION_LOSS = "opentracks:loss";
|
||||||
@@ -156,6 +159,11 @@ public class GpxFileTrackImporter extends AbstractFileTrackImporter {
|
|||||||
cadence = content.trim();
|
cadence = content.trim();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case TAG_EXTENSION_POWER:
|
||||||
|
if (content != null) {
|
||||||
|
power = content.trim();
|
||||||
|
}
|
||||||
|
break;
|
||||||
case TAG_ID:
|
case TAG_ID:
|
||||||
if (content != null) {
|
if (content != null) {
|
||||||
uuid = content.trim();
|
uuid = content.trim();
|
||||||
@@ -196,11 +204,12 @@ public class GpxFileTrackImporter extends AbstractFileTrackImporter {
|
|||||||
altitude = null;
|
altitude = null;
|
||||||
time = null;
|
time = null;
|
||||||
speed = null;
|
speed = null;
|
||||||
|
power = null;
|
||||||
gain = null;
|
gain = null;
|
||||||
loss = null;
|
loss = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onTrackPointEnd() throws SAXException {
|
private void onTrackPointEnd() {
|
||||||
boolean isFirstTrackPointInSegment = isFirstTrackPointInSegment();
|
boolean isFirstTrackPointInSegment = isFirstTrackPointInSegment();
|
||||||
TrackPoint trackPoint = getTrackPoint();
|
TrackPoint trackPoint = getTrackPoint();
|
||||||
if (isFirstTrackPointInSegment) {
|
if (isFirstTrackPointInSegment) {
|
||||||
@@ -221,7 +230,7 @@ public class GpxFileTrackImporter extends AbstractFileTrackImporter {
|
|||||||
markerType = null;
|
markerType = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onMarkerEnd() throws SAXException {
|
private void onMarkerEnd() {
|
||||||
addMarker();
|
addMarker();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ import de.dennisguse.opentracks.io.file.exporter.KMLTrackExporter;
|
|||||||
*
|
*
|
||||||
* @author Jimmy Shih
|
* @author Jimmy Shih
|
||||||
*/
|
*/
|
||||||
|
//TODO Do not use AbstractFileTrackImporter as TrackPoint sensor generation is done differently here.
|
||||||
public class KmlFileTrackImporter extends AbstractFileTrackImporter {
|
public class KmlFileTrackImporter extends AbstractFileTrackImporter {
|
||||||
|
|
||||||
private static final String TAG = KmlFileTrackImporter.class.getSimpleName();
|
private static final String TAG = KmlFileTrackImporter.class.getSimpleName();
|
||||||
|
|||||||
Reference in New Issue
Block a user