From 797486bc5f4d064821865c72425911994fa9fe22 Mon Sep 17 00:00:00 2001 From: Osana Babayan <32496536+osana@users.noreply.github.com> Date: Wed, 11 Apr 2018 10:00:07 -0400 Subject: [android] center was calculated incorrectly for LatLngBounds with zero span (#11650) --- .../com/mapbox/mapboxsdk/geometry/LatLngBounds.java | 7 +++---- .../mapbox/mapboxsdk/geometry/LatLngBoundsTest.java | 21 +++++++++++++++++++++ 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/geometry/LatLngBounds.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/geometry/LatLngBounds.java index 591dd2c144..55494b72d8 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/geometry/LatLngBounds.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/geometry/LatLngBounds.java @@ -67,7 +67,7 @@ public class LatLngBounds implements Parcelable { double latCenter = (this.latitudeNorth + this.latitudeSouth) / 2.0; double longCenter; - if (this.longitudeEast > this.longitudeWest) { + if (this.longitudeEast >= this.longitudeWest) { longCenter = (this.longitudeEast + this.longitudeWest) / 2; } else { double halfSpan = (GeometryConstants.LONGITUDE_SPAN + this.longitudeEast - this.longitudeWest) / 2.0; @@ -180,7 +180,7 @@ public class LatLngBounds implements Parcelable { */ public double getLongitudeSpan() { double longSpan = Math.abs(this.longitudeEast - this.longitudeWest); - if (this.longitudeEast > this.longitudeWest) { + if (this.longitudeEast >= this.longitudeWest) { return longSpan; } @@ -191,7 +191,7 @@ public class LatLngBounds implements Parcelable { static double getLongitudeSpan(final double longEast, final double longWest) { double longSpan = Math.abs(longEast - longWest); - if (longEast > longWest) { + if (longEast >= longWest) { return longSpan; } @@ -240,7 +240,6 @@ public class LatLngBounds implements Parcelable { westLon = temp; } } else { - lonSpan = GeometryConstants.LONGITUDE_SPAN - lonSpan; if (westLon < eastLon) { double temp = eastLon; eastLon = westLon; diff --git a/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/geometry/LatLngBoundsTest.java b/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/geometry/LatLngBoundsTest.java index 6b8462e351..e072f07fb9 100644 --- a/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/geometry/LatLngBoundsTest.java +++ b/platform/android/MapboxGLAndroidSDK/src/test/java/com/mapbox/mapboxsdk/geometry/LatLngBoundsTest.java @@ -110,6 +110,14 @@ public class LatLngBoundsTest { latLngSpan); } + @Test + public void zeroLongitudeSpan() { + latLngBounds = LatLngBounds.from(10, 10, -10, 10); + LatLngSpan latLngSpan = latLngBounds.getSpan(); + assertEquals("LatLngSpan should be shortest distance", new LatLngSpan(20, 0), + latLngSpan); + } + @Test public void nearDateLineCenter1() { latLngBounds = LatLngBounds.from(10, -175, -10, 165); @@ -145,6 +153,19 @@ public class LatLngBoundsTest { assertEquals("Center should match", new LatLng(0, 90), center); } + @Test + public void centerForBoundsWithSameLongitude() { + latLngBounds = LatLngBounds.from(10, 10, -10, 10); + LatLng center = latLngBounds.getCenter(); + assertEquals("Center should match", new LatLng(0, 10), center); + } + + @Test + public void centerForBoundsWithSameLatitude() { + latLngBounds = LatLngBounds.from(10, 10, 10, -10); + LatLng center = latLngBounds.getCenter(); + assertEquals("Center should match", new LatLng(10, 0), center); + } @Test public void center() { -- cgit v1.2.1