From 6326a2ab341bd158ed449c0f36b031e424510807 Mon Sep 17 00:00:00 2001 From: Anand Thakker Date: Tue, 11 Apr 2017 16:24:45 -0400 Subject: [PATCH] Handle |latitude| > 85.05113 in ImageSource Closes #4573 The issue here was that `util.getCoordinatesCenter`, in addition to finding the center of the given coordinates on the x-y plane, also attempts to choose the largest zoom level where one tile would cover the area spanned by the given points. Since latitudes outside of [-85.05113, 85.05113] don't fit even on z0, we would get a negative zoom value. --- src/util/util.js | 3 +- .../mapbox-gl-js#4573/expected.png | Bin 0 -> 6161 bytes .../regressions/mapbox-gl-js#4573/style.json | 34 ++++++++++++++++++ 3 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 test/integration/render-tests/regressions/mapbox-gl-js#4573/expected.png create mode 100644 test/integration/render-tests/regressions/mapbox-gl-js#4573/style.json diff --git a/src/util/util.js b/src/util/util.js index 69734b56883..9cf8256599a 100644 --- a/src/util/util.js +++ b/src/util/util.js @@ -237,8 +237,9 @@ exports.getCoordinatesCenter = function(coords: Array): Coordinate { const dx = maxX - minX; const dy = maxY - minY; const dMax = Math.max(dx, dy); + const zoom = Math.max(0, Math.floor(-Math.log(dMax) / Math.LN2)); return new Coordinate((minX + maxX) / 2, (minY + maxY) / 2, 0) - .zoomTo(Math.floor(-Math.log(dMax) / Math.LN2)); + .zoomTo(zoom); }; /** diff --git a/test/integration/render-tests/regressions/mapbox-gl-js#4573/expected.png b/test/integration/render-tests/regressions/mapbox-gl-js#4573/expected.png new file mode 100644 index 0000000000000000000000000000000000000000..46abe690d4b653c4940c24d6703869b9a0b1945a GIT binary patch literal 6161 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 literal 0 HcmV?d00001 diff --git a/test/integration/render-tests/regressions/mapbox-gl-js#4573/style.json b/test/integration/render-tests/regressions/mapbox-gl-js#4573/style.json new file mode 100644 index 00000000000..7e042f3d372 --- /dev/null +++ b/test/integration/render-tests/regressions/mapbox-gl-js#4573/style.json @@ -0,0 +1,34 @@ +{ + "version": 8, + "metadata": { + "test": { + "skipped": { + "native": "https://github.com/mapbox/mapbox-gl-native/issues/1350" + }, + "width": 64, + "height": 64 + } + }, + "sources": { + "image": { + "type": "image", + "coordinates": [ + [ -180, 85.05113 ], + [ 180, 85.05113 ], + [ 180, -85.05113 ], + [ -180, -85.05113 ] + ], + "url": "local://image/0.png" + } + }, + "layers": [ + { + "id": "image", + "type": "raster", + "source": "image", + "paint": { + "raster-fade-duration": 0 + } + } + ] +}