From: Scott Crosby <[email protected]>
---
src/uk/me/parabola/splitter/OSMWriter.java | 29 +++++++++++++++++++++++----
1 files changed, 24 insertions(+), 5 deletions(-)
diff --git a/src/uk/me/parabola/splitter/OSMWriter.java
b/src/uk/me/parabola/splitter/OSMWriter.java
index 8cd0740..03c7d52 100644
--- a/src/uk/me/parabola/splitter/OSMWriter.java
+++ b/src/uk/me/parabola/splitter/OSMWriter.java
@@ -18,6 +18,8 @@ import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
+import java.text.DecimalFormat;
+import java.text.DecimalFormatSymbols;
import java.util.Formatter;
import java.util.Iterator;
import java.util.List;
@@ -26,6 +28,11 @@ import java.util.Map;
import java.util.zip.GZIPOutputStream;
public class OSMWriter {
+ static final DecimalFormat numberFormat = new DecimalFormat(
+ "0.#######;-0.#######",
+ new DecimalFormatSymbols(Locale.US)
+ );
+
private final Area bounds;
private Writer writer;
private Area extendedBounds;
@@ -64,13 +71,13 @@ public class OSMWriter {
writeString("<osm version='0.5' generator='splitter'>\n");
writeString("<bounds minlat='");
- writeDouble(Utils.toDegrees(bounds.getMinLat()));
+ writeLongDouble(Utils.toDegrees(bounds.getMinLat()));
writeString("' minlon='");
- writeDouble(Utils.toDegrees(bounds.getMinLong()));
+ writeLongDouble(Utils.toDegrees(bounds.getMinLong()));
writeString("' maxlat='");
- writeDouble(Utils.toDegrees(bounds.getMaxLat()));
+ writeLongDouble(Utils.toDegrees(bounds.getMaxLat()));
writeString("' maxlon='");
- writeDouble(Utils.toDegrees(bounds.getMaxLong()));
+ writeLongDouble(Utils.toDegrees(bounds.getMaxLong()));
writeString("'/>\n");
}
@@ -203,9 +210,21 @@ public class OSMWriter {
index += end - start;
}
+ /** Write a double to full precision */
+ private void writeLongDouble(double value) throws IOException {
+ checkFlush(22);
+ writeString(Double.toString(value));
+ }
+
+ /** Write a double truncated to OSM's 7 digits of precision
+ *
+ * TODO: Optimize. Responsible for >30% of the runtime after other
using binary
+ * format and improved hash table.
+ */
private void writeDouble(double value) throws IOException {
checkFlush(22);
- writeString(Double.toString(value));
+ writeString(numberFormat.format(value));
+ return;
}
private void writeInt(int value) throws IOException {
--
1.7.2.3
_______________________________________________
mkgmap-dev mailing list
[email protected]
http://www.mkgmap.org.uk/mailman/listinfo/mkgmap-dev