From b208bb94fc5475859be85ebeaca82e5280535e11 Mon Sep 17 00:00:00 2001 From: Dominik Stadler Date: Sun, 27 Oct 2024 10:08:27 +0100 Subject: [PATCH] Also ensure proper formatting of UTMRef when fetching the encompassing tile-square --- .../org/dstadler/ctw/utils/UTMRefWithHash.java | 15 ++++++++------- .../dstadler/ctw/utils/UTMRefWithHashTest.java | 3 +++ 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/main/java/org/dstadler/ctw/utils/UTMRefWithHash.java b/src/main/java/org/dstadler/ctw/utils/UTMRefWithHash.java index 5ee7a12..8373ad4 100644 --- a/src/main/java/org/dstadler/ctw/utils/UTMRefWithHash.java +++ b/src/main/java/org/dstadler/ctw/utils/UTMRefWithHash.java @@ -95,11 +95,8 @@ public static String getSquareString(LatLng latLng) { private static String getSquareStringInternal(LatLng latLng) { UTMRef utmRef = latLng.toUTMRef(); - return "" + - utmRef.getLngZone() + - utmRef.getLatZone() + " " + - normalize(utmRef.getEasting()) + " " + - normalize(utmRef.getNorthing()); + return formatUTMRef(utmRef.getLngZone(), utmRef.getLatZone(), + normalize(utmRef.getEasting()), normalize(utmRef.getNorthing())); } /** @@ -197,13 +194,17 @@ public static Set readSquares(File file) throws IOException { } public String toString() { + return formatUTMRef(this.getLngZone(), this.getLatZone(), this.getEasting(), this.getNorthing()); + } + + private static String formatUTMRef(int lngZone, char latZone, double easting, double northing) { // work around a bug in underlying UTMRef when Double.toString() // starts to use exponential format, e.g. for "33T 100000.0 10000000.0" return String.format(Locale.ROOT, "%d%s %f %f", - this.getLngZone(), this.getLatZone(), this.getEasting(), this.getNorthing()). + lngZone, latZone, easting, northing). // cut away trailing zeros in the decimal part, couuld not find how to do this // with String.format() itself - replaceAll("\\.(\\d)0+", ".$1"); + replaceAll("\\.(\\d)0+", ".$1"); } @Override diff --git a/src/test/java/org/dstadler/ctw/utils/UTMRefWithHashTest.java b/src/test/java/org/dstadler/ctw/utils/UTMRefWithHashTest.java index e1893b6..441968d 100644 --- a/src/test/java/org/dstadler/ctw/utils/UTMRefWithHashTest.java +++ b/src/test/java/org/dstadler/ctw/utils/UTMRefWithHashTest.java @@ -93,6 +93,9 @@ void testSquareStringNormalize() { String ref1 = UTMRefWithHash.getSquareString(new LatLng(47.999573, 15.187657)); String ref2 = UTMRefWithHash.getSquareString(new LatLng(48.002663, 15.187625)); + // first ensure we get the expected string + assertEquals("33T 513000.0 5316000.0", ref1); + assertEquals(ref1, ref2, "Expecting to get the same square for the two coordinates, but had " + ref1 + " and " + ref2); }