diff options
author | Bruno de Oliveira Abinader <bruno@mapbox.com> | 2016-10-02 17:47:29 +0300 |
---|---|---|
committer | Bruno de Oliveira Abinader <bruno@mapbox.com> | 2016-10-11 19:36:21 +0300 |
commit | 7b907b6d1ceddd9e10263316964aea101bd743b8 (patch) | |
tree | 78df07b591438e70eceb0d7d1549f6a0edfc280a /src/mbgl/util | |
parent | 94a014cde3cf9a70808092d8402686c3f6d2f515 (diff) | |
download | qtlocation-mapboxgl-7b907b6d1ceddd9e10263316964aea101bd743b8.tar.gz |
[core] Use TilePoint in Source::Impl::queryRenderedFeatures
Diffstat (limited to 'src/mbgl/util')
-rw-r--r-- | src/mbgl/util/tile_coordinate.hpp | 25 |
1 files changed, 21 insertions, 4 deletions
diff --git a/src/mbgl/util/tile_coordinate.hpp b/src/mbgl/util/tile_coordinate.hpp index df240a50e0..194a62ecef 100644 --- a/src/mbgl/util/tile_coordinate.hpp +++ b/src/mbgl/util/tile_coordinate.hpp @@ -1,15 +1,20 @@ #pragma once -#include <mbgl/util/geometry.hpp> #include <mbgl/map/transform_state.hpp> +#include <mbgl/math/clamp.hpp> +#include <mbgl/tile/geometry_tile_data.hpp> +#include <mbgl/tile/tile_id.hpp> +#include <mbgl/util/geometry.hpp> namespace mbgl { +using TileCoordinatePoint = Point<double>; + // Has floating point x/y coordinates. // Used for computing the tiles that need to be visible in the viewport. class TileCoordinate { public: - Point<double> p; + TileCoordinatePoint p; double z; static TileCoordinate fromLatLng(const TransformState& state, double zoom, const LatLng& latLng) { @@ -17,13 +22,25 @@ public: return { state.project(latLng) * scale / double(util::tileSize), zoom }; } - static TileCoordinate fromScreenCoordinate(const TransformState& state, double zoom, const ScreenCoordinate& point) { - return fromLatLng(state, zoom, state.screenCoordinateToLatLng(point)); + static TileCoordinate fromScreenCoordinate(const TransformState& state, double zoom, const ScreenCoordinate& screenCoordinate) { + return fromLatLng(state, zoom, state.screenCoordinateToLatLng(screenCoordinate)); } TileCoordinate zoomTo(double zoom) const { return { p * std::pow(2, zoom - z), zoom }; } + + static GeometryCoordinate toGeometryCoordinate(const UnwrappedTileID& tileID, const TileCoordinatePoint& point) { + auto zoomed = TileCoordinate { point, 0 }.zoomTo(tileID.canonical.z); + return { + int16_t(util::clamp<int64_t>((zoomed.p.x - tileID.canonical.x - tileID.wrap * std::pow(2.0, tileID.canonical.z)) * util::EXTENT, + std::numeric_limits<int16_t>::min(), + std::numeric_limits<int16_t>::max())), + int16_t(util::clamp<int64_t>((zoomed.p.y - tileID.canonical.y) * util::EXTENT, + std::numeric_limits<int16_t>::min(), + std::numeric_limits<int16_t>::max())) + }; + } }; } // namespace mbgl |