From: Scott Crosby <[email protected]>
Result is identical numbers but not binary-identical because of
trailing 0 digits in the output.
Speedup is cumulative with binary format and fixed hash table.
---
src/uk/me/parabola/splitter/OSMWriter.java | 19 +++++++++++++++----
1 files changed, 15 insertions(+), 4 deletions(-)
diff --git a/src/uk/me/parabola/splitter/OSMWriter.java
b/src/uk/me/parabola/splitter/OSMWriter.java
index 03c7d52..c42ce52 100644
--- a/src/uk/me/parabola/splitter/OSMWriter.java
+++ b/src/uk/me/parabola/splitter/OSMWriter.java
@@ -215,7 +215,6 @@ public class OSMWriter {
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
@@ -223,10 +222,22 @@ public class OSMWriter {
*/
private void writeDouble(double value) throws IOException {
checkFlush(22);
- writeString(numberFormat.format(value));
- return;
+ // Punt on some annoying specialcases
+ if (value < -200 || value > 200 || (value > -1 && value < 1))
+ writeString(numberFormat.format(value));
+ else {
+ if (value < 0) {
+ writeChar('-');
+ value = -value;
+ }
+
+ int val = (int)Math.round(value*10000000);
+ StringBuilder s = new StringBuilder(Integer.toString(val));
+ s.insert(s.length()-7, '.');
+ writeString(s.toString());
+ }
}
-
+
private void writeInt(int value) throws IOException {
checkFlush(11);
index += Convert.intToString(value, charBuf, index);
--
1.7.2.3
_______________________________________________
mkgmap-dev mailing list
[email protected]
http://www.mkgmap.org.uk/mailman/listinfo/mkgmap-dev