summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAsheem Mamoowala <asheem.mamoowala@mapbox.com>2018-05-21 14:59:54 -0700
committerGitHub <noreply@github.com>2018-05-21 14:59:54 -0700
commit78fdf5c7716ee7c79800b51713f30f1772514dc6 (patch)
treed29e247149f9e540da0c10b5d9f7edf61b3193fd
parentbef2a7ccb6e800d2ca6f2bac5c863b49fbba103d (diff)
downloadqtlocation-mapboxgl-78fdf5c7716ee7c79800b51713f30f1772514dc6.tar.gz
Clamp TileJSON.bounds latitudes to [-90, 90] (#11964)
Fixes #11963.
-rw-r--r--src/mbgl/style/conversion/tileset.cpp17
-rw-r--r--test/style/conversion/tileset.test.cpp2
2 files changed, 10 insertions, 9 deletions
diff --git a/src/mbgl/style/conversion/tileset.cpp b/src/mbgl/style/conversion/tileset.cpp
index a2c4aa80b3..15ed10a90f 100644
--- a/src/mbgl/style/conversion/tileset.cpp
+++ b/src/mbgl/style/conversion/tileset.cpp
@@ -1,14 +1,11 @@
#include <mbgl/style/conversion/tileset.hpp>
#include <mbgl/util/geo.hpp>
+#include <mbgl/math/clamp.hpp>
namespace mbgl {
namespace style {
namespace conversion {
-bool validateLatitude(const double lat) {
- return lat <= 90 && lat >= -90;
-}
-
optional<Tileset> Converter<Tileset>::operator()(const Convertible& value, Error& error) const {
Tileset result;
@@ -95,16 +92,20 @@ optional<Tileset> Converter<Tileset>::operator()(const Convertible& value, Error
error = { "bounds array must contain numeric longitude and latitude values" };
return {};
}
- if (!validateLatitude(*bottom) || !validateLatitude(*top) || top <= bottom){
- error = { "bounds latitude values must be between -90 and 90 with bottom less than top" };
+
+ bottom = util::clamp(*bottom, -90.0, 90.0);
+ top = util::clamp(*top, -90.0, 90.0);
+ if (top <= bottom){
+ error = { "bounds bottom latitude must be between smaller than top latitude" };
return {};
}
+
if(*left >= *right) {
error = { "bounds left longitude should be less than right longitude" };
return {};
}
- *left = util::max(-180.0, *left);
- *right = util::min(180.0, *right);
+ left = util::max(-180.0, *left);
+ right = util::min(180.0, *right);
result.bounds = LatLngBounds::hull({ *bottom, *left }, { *top, *right });
}
diff --git a/test/style/conversion/tileset.test.cpp b/test/style/conversion/tileset.test.cpp
index f10aa0e318..f405fb1361 100644
--- a/test/style/conversion/tileset.test.cpp
+++ b/test/style/conversion/tileset.test.cpp
@@ -66,7 +66,7 @@ TEST(Tileset, BoundsAreClamped) {
Error error;
mbgl::optional<Tileset> converted = convertJSON<Tileset>(R"JSON({
"tiles": ["http://mytiles"],
- "bounds": [-181.0000005,-90,180.00000000000006,90]
+ "bounds": [-181.0000005,-90.000000006,180.00000000000006,91]
})JSON", error);
EXPECT_TRUE((bool) converted);
EXPECT_EQ(converted->bounds, LatLngBounds::hull({90, -180}, {-90, 180}));