From 78fdf5c7716ee7c79800b51713f30f1772514dc6 Mon Sep 17 00:00:00 2001 From: Asheem Mamoowala Date: Mon, 21 May 2018 14:59:54 -0700 Subject: Clamp TileJSON.bounds latitudes to [-90, 90] (#11964) Fixes #11963. --- src/mbgl/style/conversion/tileset.cpp | 17 +++++++++-------- test/style/conversion/tileset.test.cpp | 2 +- 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 #include +#include namespace mbgl { namespace style { namespace conversion { -bool validateLatitude(const double lat) { - return lat <= 90 && lat >= -90; -} - optional Converter::operator()(const Convertible& value, Error& error) const { Tileset result; @@ -95,16 +92,20 @@ optional Converter::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 converted = convertJSON(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})); -- cgit v1.2.1