From 58e3c0604d458519520cdbbd1373a7e53dc916df Mon Sep 17 00:00:00 2001 From: Jared Casper Date: Wed, 9 Feb 2011 10:25:28 -0800 Subject: [PATCH] Clean up formatting of numbers in gpx export. Addresses issue #299 and ensures Latitude and Longitude are formatted correctly as well. --- .../apps/mytracks/io/GpxTrackWriter.java | 20 ++++++++++++------- .../apps/mytracks/io/GpxTrackWriterTest.java | 11 +++++++--- .../mytracks/io/TrackFormatWriterTest.java | 2 +- 3 files changed, 22 insertions(+), 11 deletions(-) diff --git a/MyTracks/src/com/google/android/apps/mytracks/io/GpxTrackWriter.java b/MyTracks/src/com/google/android/apps/mytracks/io/GpxTrackWriter.java index 6c7978b11..f1ee1c256 100644 --- a/MyTracks/src/com/google/android/apps/mytracks/io/GpxTrackWriter.java +++ b/MyTracks/src/com/google/android/apps/mytracks/io/GpxTrackWriter.java @@ -26,6 +26,7 @@ import java.io.OutputStream; import java.io.PrintWriter; import java.nio.charset.Charset; import java.text.SimpleDateFormat; +import java.text.DecimalFormat; import java.util.Date; import java.util.TimeZone; @@ -36,6 +37,9 @@ import java.util.TimeZone; */ public class GpxTrackWriter implements TrackFormatWriter { + static final int LATLONG_FORMAT = Location.FORMAT_DEGREES; + static final DecimalFormat ELEVATION_FORMAT = + new DecimalFormat("#.#"); static final SimpleDateFormat TIMESTAMP_FORMAT = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'"); static { @@ -118,10 +122,11 @@ public class GpxTrackWriter implements TrackFormatWriter { @Override public void writeLocation(Location l) { if (pw != null) { - pw.println(""); + pw.println(""); Date d = new Date(l.getTime()); - pw.println("" + l.getAltitude() + ""); + pw.println("" + ELEVATION_FORMAT.format(l.getAltitude()) + ""); pw.println(""); pw.println(""); } @@ -141,14 +146,15 @@ public class GpxTrackWriter implements TrackFormatWriter { // TODO: The gpx spec says waypoints should come *before* tracks Location l = waypoint.getLocation(); if (l != null) { - pw.println(""); + pw.println(""); + pw.println("" + ELEVATION_FORMAT.format(l.getAltitude()) + ""); + pw.println(""); pw.println("" + StringUtils.stringAsCData(waypoint.getName()) + ""); pw.println("" + StringUtils.stringAsCData(waypoint.getDescription()) + ""); - pw.println(""); - pw.println("" + l.getAltitude() + ""); pw.println(""); } } diff --git a/MyTracksTest/src/com/google/android/apps/mytracks/io/GpxTrackWriterTest.java b/MyTracksTest/src/com/google/android/apps/mytracks/io/GpxTrackWriterTest.java index c72924e22..69ec90ef2 100644 --- a/MyTracksTest/src/com/google/android/apps/mytracks/io/GpxTrackWriterTest.java +++ b/MyTracksTest/src/com/google/android/apps/mytracks/io/GpxTrackWriterTest.java @@ -75,12 +75,17 @@ public class GpxTrackWriterTest extends TrackFormatWriterTest { * Asserts that the given tag describes the given location. */ private void assertTagMatchesLocation(Element tag, Location loc) { - assertEquals(Double.toString(loc.getLatitude()), tag.getAttribute("lat")); - assertEquals(Double.toString(loc.getLongitude()), tag.getAttribute("lon")); + assertEquals( + Location.convert(loc.getLatitude(), GpxTrackWriter.LATLONG_FORMAT), + tag.getAttribute("lat")); + assertEquals( + Location.convert(loc.getLongitude(), GpxTrackWriter.LATLONG_FORMAT), + tag.getAttribute("lon")); assertEquals( GpxTrackWriter.TIMESTAMP_FORMAT.format(new Date(loc.getTime())), getChildTextValue(tag, "time")); - assertEquals(Double.toString(loc.getAltitude()), + assertEquals( + GpxTrackWriter.ELEVATION_FORMAT.format(loc.getAltitude()), getChildTextValue(tag, "ele")); } } diff --git a/MyTracksTest/src/com/google/android/apps/mytracks/io/TrackFormatWriterTest.java b/MyTracksTest/src/com/google/android/apps/mytracks/io/TrackFormatWriterTest.java index 89d38ad55..a4827fecd 100644 --- a/MyTracksTest/src/com/google/android/apps/mytracks/io/TrackFormatWriterTest.java +++ b/MyTracksTest/src/com/google/android/apps/mytracks/io/TrackFormatWriterTest.java @@ -81,7 +81,7 @@ public abstract class TrackFormatWriterTest extends AndroidTestCase { protected void populateLocations(MyTracksLocation... locs) { for (int i = 0; i < locs.length; i++) { MyTracksLocation loc = locs[i]; - loc.setAltitude(i * 1000); + loc.setAltitude(i * 5000000); loc.setLatitude(i); loc.setLongitude(-i); loc.setTime(10000000 + i * 1000);