From fc0a0ef98a60885ed0aa872cf04dbf29dded8821 Mon Sep 17 00:00:00 2001 From: Bruno de Oliveira Abinader Date: Mon, 14 Mar 2016 12:16:53 +0200 Subject: [PATCH] [core] Always return wrapped coordinates This fixes an issue in both iOS and Android when e.g. adding a marker on both sides of the dateline border in Taveuni island, the marker in one of the sides would have an out-of-bounds longitude. --- src/mbgl/map/transform.cpp | 2 +- test/map/transform.cpp | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/mbgl/map/transform.cpp b/src/mbgl/map/transform.cpp index b28325143..da085ac75 100644 --- a/src/mbgl/map/transform.cpp +++ b/src/mbgl/map/transform.cpp @@ -662,5 +662,5 @@ LatLng Transform::screenCoordinateToLatLng(const ScreenCoordinate& point) const ScreenCoordinate flippedPoint = point; flippedPoint.y = state.height - flippedPoint.y; - return state.screenCoordinateToLatLng(flippedPoint); + return state.screenCoordinateToLatLng(flippedPoint).wrapped(); } diff --git a/test/map/transform.cpp b/test/map/transform.cpp index d26df51fd..0567696f6 100644 --- a/test/map/transform.cpp +++ b/test/map/transform.cpp @@ -410,11 +410,17 @@ TEST(Transform, Antimeridian) { ScreenCoordinate pixelWaikiriForwards = transform.latLngToScreenCoordinate(coordinateWaikiri); ASSERT_DOUBLE_EQ(437.95953728819512, pixelWaikiriForwards.x); ASSERT_DOUBLE_EQ(pixelWaikiri.y, pixelWaikiriForwards.y); + LatLng coordinateFromPixel = transform.screenCoordinateToLatLng(pixelWaikiriForwards); + ASSERT_NEAR(coordinateWaikiri.latitude, coordinateFromPixel.latitude, 0.000001); + ASSERT_NEAR(coordinateWaikiri.longitude, coordinateFromPixel.longitude, 0.000001); transform.setLatLng({ coordinateWaikiri.latitude, -179.9787 }); ScreenCoordinate pixelWaikiriBackwards = transform.latLngToScreenCoordinate(coordinateWaikiri); ASSERT_DOUBLE_EQ(pixelWaikiriForwards.x, pixelWaikiriBackwards.x); ASSERT_DOUBLE_EQ(pixelWaikiriForwards.y, pixelWaikiriBackwards.y); + coordinateFromPixel = transform.screenCoordinateToLatLng(pixelWaikiriBackwards); + ASSERT_NEAR(coordinateWaikiri.latitude, coordinateFromPixel.latitude, 0.000001); + ASSERT_NEAR(coordinateWaikiri.longitude, coordinateFromPixel.longitude, 0.000001); } TEST(Transform, Camera) {