diff options
author | Chris Loer <chris.loer@gmail.com> | 2018-04-02 17:41:09 -0700 |
---|---|---|
committer | Ansis Brammanis <ansis.brammanis@gmail.com> | 2018-04-26 18:03:17 -0400 |
commit | f7d20a587199ccee42469ecea2299ae73bfaae49 (patch) | |
tree | 19da41f7b8c867aeb860d9aab650773337ef1257 /src/mbgl/tile | |
parent | 0767bf06869c380305c57df1b69d74fac5a6c94a (diff) | |
download | qtlocation-mapboxgl-f7d20a587199ccee42469ecea2299ae73bfaae49.tar.gz |
[core] fix querying circles across tile boundaries
Diffstat (limited to 'src/mbgl/tile')
-rw-r--r-- | src/mbgl/tile/geometry_tile.cpp | 22 | ||||
-rw-r--r-- | src/mbgl/tile/geometry_tile.hpp | 2 | ||||
-rw-r--r-- | src/mbgl/tile/tile.cpp | 4 | ||||
-rw-r--r-- | src/mbgl/tile/tile.hpp | 2 |
4 files changed, 21 insertions, 9 deletions
diff --git a/src/mbgl/tile/geometry_tile.cpp b/src/mbgl/tile/geometry_tile.cpp index 317c5454f6..92a226d3c1 100644 --- a/src/mbgl/tile/geometry_tile.cpp +++ b/src/mbgl/tile/geometry_tile.cpp @@ -201,6 +201,17 @@ Bucket* GeometryTile::getBucket(const Layer::Impl& layer) const { return it->second.get(); } +float GeometryTile::getQueryPadding(const std::vector<const RenderLayer*>& layers) { + float queryPadding = 0; + for (const RenderLayer* layer : layers) { + auto bucket = getBucket(*layer->baseImpl); + if (bucket) { + queryPadding = std::max(queryPadding, bucket->getQueryRadius(*layer)); + } + } + return queryPadding; +} + void GeometryTile::queryRenderedFeatures( std::unordered_map<std::string, std::vector<Feature>>& result, const GeometryCoordinates& queryGeometry, @@ -210,14 +221,7 @@ void GeometryTile::queryRenderedFeatures( if (!getData()) return; - // Determine the additional radius needed factoring in property functions - float additionalRadius = 0; - for (const RenderLayer* layer : layers) { - auto bucket = getBucket(*layer->baseImpl); - if (bucket) { - additionalRadius = std::max(additionalRadius, bucket->getQueryRadius(*layer)); - } - } + const float queryPadding = getQueryPadding(layers); latestFeatureIndex->query(result, queryGeometry, @@ -227,7 +231,7 @@ void GeometryTile::queryRenderedFeatures( options, id.toUnwrapped(), layers, - additionalRadius); + queryPadding); } void GeometryTile::querySourceFeatures( diff --git a/src/mbgl/tile/geometry_tile.hpp b/src/mbgl/tile/geometry_tile.hpp index a3b2eb6492..a43bf44940 100644 --- a/src/mbgl/tile/geometry_tile.hpp +++ b/src/mbgl/tile/geometry_tile.hpp @@ -60,6 +60,8 @@ public: std::vector<Feature>& result, const SourceQueryOptions&) override; + float getQueryPadding(const std::vector<const RenderLayer*>&) override; + void cancel() override; class LayoutResult { diff --git a/src/mbgl/tile/tile.cpp b/src/mbgl/tile/tile.cpp index e65bc39540..56698e84c4 100644 --- a/src/mbgl/tile/tile.cpp +++ b/src/mbgl/tile/tile.cpp @@ -39,6 +39,10 @@ void Tile::queryRenderedFeatures( const std::vector<const RenderLayer*>&, const RenderedQueryOptions&) {} +float Tile::getQueryPadding(const std::vector<const RenderLayer*>&) { + return 0; +} + void Tile::querySourceFeatures( std::vector<Feature>&, const SourceQueryOptions&) {} diff --git a/src/mbgl/tile/tile.hpp b/src/mbgl/tile/tile.hpp index a0effa29a1..5f7a076850 100644 --- a/src/mbgl/tile/tile.hpp +++ b/src/mbgl/tile/tile.hpp @@ -63,6 +63,8 @@ public: std::vector<Feature>& result, const SourceQueryOptions&); + virtual float getQueryPadding(const std::vector<const RenderLayer*>&); + void setTriedCache(); // Returns true when the tile source has received a first response, regardless of whether a load |