From 026b6d4c01a3d96af9629cc1790373137ecab950 Mon Sep 17 00:00:00 2001 From: Bruno de Oliveira Abinader Date: Mon, 7 Mar 2016 18:07:23 +0200 Subject: [core] Coordinate wrapping fixes - Make returning LatLngs unwrapped by default. - PointAnnotation and ShapeAnnotation are always wrapped so they can be selected via intersection from the visible tile boundaries. - Fixes LatLng::wrap() calculation. - Fixes LatLng::unwrapForShortestPath() calculation. The new unwrapForShortestPath algorithm unwraps the start coordinate either forwards or backwards depending on the end coordinate value, so we can always cross the antimeridian when needed and still obtain a wrapped end coordinate in the end. Fixes #4214. --- test/util/geo.cpp | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'test/util') diff --git a/test/util/geo.cpp b/test/util/geo.cpp index 86f448ebbc..bdf335dc47 100644 --- a/test/util/geo.cpp +++ b/test/util/geo.cpp @@ -105,6 +105,34 @@ TEST(LatLng, FromTileID) { } } +TEST(LatLng, Boundaries) { + LatLng coordinate; + ASSERT_DOUBLE_EQ(0, coordinate.latitude); + ASSERT_DOUBLE_EQ(0, coordinate.longitude); + + coordinate.longitude = -180.1; + ASSERT_DOUBLE_EQ(-180.1, coordinate.longitude); + + coordinate.wrap(); + ASSERT_DOUBLE_EQ(179.90000000000001, coordinate.longitude); // 1E-14 + + coordinate.longitude = 180.9; + coordinate.wrap(); + ASSERT_DOUBLE_EQ(-179.09999999999999, coordinate.longitude); + + coordinate.longitude = -360.5; + coordinate.wrap(); + ASSERT_DOUBLE_EQ(-0.5, coordinate.longitude); + + coordinate.longitude = 360.5; + coordinate.wrap(); + ASSERT_DOUBLE_EQ(0.5, coordinate.longitude); + + coordinate.longitude = 360000.5; + coordinate.wrap(); + ASSERT_DOUBLE_EQ(0.5, coordinate.longitude); +} + TEST(LatLngBounds, FromTileID) { { const LatLngBounds bounds{ TileID(0, 0, 0, 0) }; -- cgit v1.2.1