summaryrefslogtreecommitdiff
path: root/src/mbgl/tile
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbgl/tile')
-rw-r--r--src/mbgl/tile/geometry_tile.cpp22
-rw-r--r--src/mbgl/tile/geometry_tile.hpp2
-rw-r--r--src/mbgl/tile/tile.cpp4
-rw-r--r--src/mbgl/tile/tile.hpp2
4 files changed, 21 insertions, 9 deletions
diff --git a/src/mbgl/tile/geometry_tile.cpp b/src/mbgl/tile/geometry_tile.cpp
index b0b898e61a..56a0558248 100644
--- a/src/mbgl/tile/geometry_tile.cpp
+++ b/src/mbgl/tile/geometry_tile.cpp
@@ -200,6 +200,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,
@@ -209,14 +220,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,
@@ -226,7 +230,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