diff options
author | Bruno de Oliveira Abinader <bruno@mapbox.com> | 2017-06-16 16:32:52 +0300 |
---|---|---|
committer | Bruno de Oliveira Abinader <bruno@mapbox.com> | 2017-06-16 16:33:06 +0300 |
commit | 20adbdeaa3293a0561e9a1f91fcf2d0143b91066 (patch) | |
tree | 4321bd03f0bc0cb152f4b3544c556a30a24ceb5a | |
parent | dc181e3e05f5987d602c7bb73c9b6030c822a1fd (diff) | |
download | qtlocation-mapboxgl-upstream/tilecover-updates.tar.gz |
[core] Increase pitch limit to 80 degreesupstream/tilecover-updates
-rw-r--r-- | include/mbgl/util/constants.hpp | 2 | ||||
-rw-r--r-- | src/mbgl/util/tile_cover.cpp | 18 |
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); } |