summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruno de Oliveira Abinader <bruno@mapbox.com>2017-06-16 16:32:52 +0300
committerBruno de Oliveira Abinader <bruno@mapbox.com>2017-06-16 16:33:06 +0300
commit20adbdeaa3293a0561e9a1f91fcf2d0143b91066 (patch)
tree4321bd03f0bc0cb152f4b3544c556a30a24ceb5a
parentdc181e3e05f5987d602c7bb73c9b6030c822a1fd (diff)
downloadqtlocation-mapboxgl-upstream/tilecover-updates.tar.gz
[core] Increase pitch limit to 80 degreesupstream/tilecover-updates
-rw-r--r--include/mbgl/util/constants.hpp2
-rw-r--r--src/mbgl/util/tile_cover.cpp18
2 files changed, 14 insertions, 6 deletions
diff --git a/include/mbgl/util/constants.hpp b/include/mbgl/util/constants.hpp
index 14aaa752bc..bc0fb2998a 100644
--- a/include/mbgl/util/constants.hpp
+++ b/include/mbgl/util/constants.hpp
@@ -32,7 +32,7 @@ constexpr double EARTH_RADIUS_M = 6378137;
constexpr double LATITUDE_MAX = 85.051128779806604;
constexpr double LONGITUDE_MAX = 180;
constexpr double DEGREES_MAX = 360;
-constexpr double PITCH_MAX = M_PI / 3;
+constexpr double PITCH_MAX = 1.39626; // ~80 degrees.
constexpr double MIN_ZOOM = 0.0;
constexpr double MAX_ZOOM = 25.5;
constexpr float MIN_ZOOM_F = MIN_ZOOM;
diff --git a/src/mbgl/util/tile_cover.cpp b/src/mbgl/util/tile_cover.cpp
index dc39d17297..a0fe3fe21c 100644
--- a/src/mbgl/util/tile_cover.cpp
+++ b/src/mbgl/util/tile_cover.cpp
@@ -167,12 +167,20 @@ std::vector<UnwrappedTileID> tileCover(const TransformState& state, uint8_t zoom
const double w = state.getSize().width;
const double h = state.getSize().height;
+
+ // Limit tile coverage when pitch >= 60 degrees (M_PI / 3).
+ const double clampedH = [&]() {
+ const double clampedPitch = state.getPitch() - M_PI / 3;
+ return clampedPitch <= 0 ? h : h - (h * std::sin(clampedPitch));
+ }();
+
+ // top-left, top-right, bottom-right, bottom-left, center
return tileCover(
- TileCoordinate::fromScreenCoordinate(state, zoom, { 0, 0 }).p,
- TileCoordinate::fromScreenCoordinate(state, zoom, { w, 0 }).p,
- TileCoordinate::fromScreenCoordinate(state, zoom, { w, h }).p,
- TileCoordinate::fromScreenCoordinate(state, zoom, { 0, h }).p,
- TileCoordinate::fromScreenCoordinate(state, zoom, { w/2, h/2 }).p,
+ TileCoordinate::fromScreenCoordinate(state, zoom, { 0, 0 }).p,
+ TileCoordinate::fromScreenCoordinate(state, zoom, { w, 0 }).p,
+ TileCoordinate::fromScreenCoordinate(state, zoom, { w, clampedH }).p,
+ TileCoordinate::fromScreenCoordinate(state, zoom, { 0, clampedH }).p,
+ TileCoordinate::fromScreenCoordinate(state, zoom, { w/2, h/2 }).p,
zoom);
}