From ef62b78fce06ad93de87e9a6a6775ae33fff214d Mon Sep 17 00:00:00 2001 From: Bruno de Oliveira Abinader Date: Tue, 18 Oct 2016 14:21:59 +0300 Subject: [core] TileCoordinate::fromLatLng no longer depens on TransformState --- include/mbgl/util/projection.hpp | 2 +- src/mbgl/util/tile_coordinate.hpp | 14 ++++++++------ src/mbgl/util/tile_cover.cpp | 11 +++++------ test/tile/tile_coordinate.test.cpp | 4 ++-- 4 files changed, 16 insertions(+), 15 deletions(-) diff --git a/include/mbgl/util/projection.hpp b/include/mbgl/util/projection.hpp index 4212e5da7a..9ca3cd4ab5 100644 --- a/include/mbgl/util/projection.hpp +++ b/include/mbgl/util/projection.hpp @@ -2,9 +2,9 @@ #include #include +#include #include -#include namespace mbgl { diff --git a/src/mbgl/util/tile_coordinate.hpp b/src/mbgl/util/tile_coordinate.hpp index 46073c0dc9..bcd1c8444f 100644 --- a/src/mbgl/util/tile_coordinate.hpp +++ b/src/mbgl/util/tile_coordinate.hpp @@ -18,23 +18,25 @@ public: TileCoordinatePoint p; double z; - static TileCoordinate fromLatLng(const TransformState& state, double zoom, const LatLng& latLng) { - const double scale = std::pow(2, zoom - state.getZoom()); - return { Projection::project(latLng, state.getScale()) * scale / double(util::tileSize), zoom }; + static TileCoordinate fromLatLng(double zoom, const LatLng& latLng) { + const double scale = std::pow(2.0, zoom); + return { Projection::project(latLng, scale) / double(util::tileSize), zoom }; } static TileCoordinate fromScreenCoordinate(const TransformState& state, double zoom, const ScreenCoordinate& screenCoordinate) { - return fromLatLng(state, zoom, state.screenCoordinateToLatLng(screenCoordinate)); + return fromLatLng(zoom, state.screenCoordinateToLatLng(screenCoordinate)); } TileCoordinate zoomTo(double zoom) const { - return { p * std::pow(2, zoom - z), zoom }; + const double scaleDiff = std::pow(2.0, zoom - z); + return { p * scaleDiff, zoom }; } static GeometryCoordinate toGeometryCoordinate(const UnwrappedTileID& tileID, const TileCoordinatePoint& point) { + const double scale = std::pow(2.0, tileID.canonical.z); auto zoomed = TileCoordinate { point, 0 }.zoomTo(tileID.canonical.z); return { - int16_t(util::clamp((zoomed.p.x - tileID.canonical.x - tileID.wrap * std::pow(2.0, tileID.canonical.z)) * util::EXTENT, + int16_t(util::clamp((zoomed.p.x - tileID.canonical.x - tileID.wrap * scale) * util::EXTENT, std::numeric_limits::min(), std::numeric_limits::max())), int16_t(util::clamp((zoomed.p.y - tileID.canonical.y) * util::EXTENT, diff --git a/src/mbgl/util/tile_cover.cpp b/src/mbgl/util/tile_cover.cpp index 5487fb269c..c6bf7d362a 100644 --- a/src/mbgl/util/tile_cover.cpp +++ b/src/mbgl/util/tile_cover.cpp @@ -147,13 +147,12 @@ std::vector tileCover(const LatLngBounds& bounds_, int32_t z) { { std::max(bounds_.south(), -util::LATITUDE_MAX), bounds_.west() }, { std::min(bounds_.north(), util::LATITUDE_MAX), bounds_.east() }); - const TransformState state; return tileCover( - TileCoordinate::fromLatLng(state, z, bounds.northwest()).p, - TileCoordinate::fromLatLng(state, z, bounds.northeast()).p, - TileCoordinate::fromLatLng(state, z, bounds.southeast()).p, - TileCoordinate::fromLatLng(state, z, bounds.southwest()).p, - TileCoordinate::fromLatLng(state, z, bounds.center()).p, + TileCoordinate::fromLatLng(z, bounds.northwest()).p, + TileCoordinate::fromLatLng(z, bounds.northeast()).p, + TileCoordinate::fromLatLng(z, bounds.southeast()).p, + TileCoordinate::fromLatLng(z, bounds.southwest()).p, + TileCoordinate::fromLatLng(z, bounds.center()).p, z); } diff --git a/test/tile/tile_coordinate.test.cpp b/test/tile/tile_coordinate.test.cpp index f2337c1e7f..740a03894d 100644 --- a/test/tile/tile_coordinate.test.cpp +++ b/test/tile/tile_coordinate.test.cpp @@ -41,7 +41,7 @@ TEST(TileCoordinate, FromLatLng) { for (const auto& pair : edges) { const auto& latLng = pair.first; const auto& screenCoordinate = pair.second; - const auto base = TileCoordinate::fromLatLng(transform.getState(), 0, latLng); + const auto base = TileCoordinate::fromLatLng(0, latLng); // 16 is the maximum zoom level where we actually compute placements. for (uint8_t integerZoom = 0; integerZoom <= 16; ++integerZoom) { @@ -52,7 +52,7 @@ TEST(TileCoordinate, FromLatLng) { latLng.latitude == 0 ? 0.5 : latLng.latitude == -util::LATITUDE_MAX ? 1.0 : 0, }; - const auto fromLatLng = TileCoordinate::fromLatLng(transform.getState(), zoom, latLng); + const auto fromLatLng = TileCoordinate::fromLatLng(zoom, latLng); ASSERT_DOUBLE_EQ(fromLatLng.z, zoom); ASSERT_DOUBLE_EQ(fromLatLng.p.x, tilePoint.x * maxTilesPerAxis); ASSERT_NEAR(fromLatLng.p.y, tilePoint.y * maxTilesPerAxis, 1.0e-7); -- cgit v1.2.1