summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Firebaugh <john.firebaugh@gmail.com>2017-08-12 12:19:45 -0700
committerJohn Firebaugh <john.firebaugh@gmail.com>2017-08-24 13:06:23 -0700
commitd26559bb28b0b1803730cc52c92a0747ddc172e7 (patch)
treee0e6a1e717ccb36a0318541ead84fdebf4dad878
parente706ed4b2ee8d73e17146b33b2c91463b7186777 (diff)
downloadqtlocation-mapboxgl-d26559bb28b0b1803730cc52c92a0747ddc172e7.tar.gz
[core] Avoid GeometryTile dependency in FeatureIndex
-rw-r--r--src/mbgl/geometry/feature_index.cpp23
-rw-r--r--src/mbgl/geometry/feature_index.hpp3
-rw-r--r--src/mbgl/tile/geometry_tile.cpp11
3 files changed, 14 insertions, 23 deletions
diff --git a/src/mbgl/geometry/feature_index.cpp b/src/mbgl/geometry/feature_index.cpp
index d846fb1700..1adb933e44 100644
--- a/src/mbgl/geometry/feature_index.cpp
+++ b/src/mbgl/geometry/feature_index.cpp
@@ -8,7 +8,7 @@
#include <mbgl/math/minmax.hpp>
#include <mbgl/style/filter.hpp>
#include <mbgl/style/filter_evaluator.hpp>
-#include <mbgl/tile/geometry_tile.hpp>
+#include <mbgl/tile/tile_id.hpp>
#include <mapbox/geometry/envelope.hpp>
@@ -39,23 +39,6 @@ static bool topDownSymbols(const IndexedSubfeature& a, const IndexedSubfeature&
return a.sortIndex < b.sortIndex;
}
-static int16_t getAdditionalQueryRadius(const std::vector<const RenderLayer*>& layers,
- const GeometryTile& tile,
- const float pixelsToTileUnits) {
-
- // Determine the additional radius needed factoring in property functions
- float additionalRadius = 0;
-
- for (const auto& layer : layers) {
- auto bucket = tile.getBucket(*layer->baseImpl);
- if (bucket) {
- additionalRadius = std::max(additionalRadius, bucket->getQueryRadius(*layer) * pixelsToTileUnits);
- }
- }
-
- return std::min<int16_t>(util::EXTENT, additionalRadius);
-}
-
void FeatureIndex::query(
std::unordered_map<std::string, std::vector<Feature>>& result,
const GeometryCoordinates& queryGeometry,
@@ -67,11 +50,11 @@ void FeatureIndex::query(
const CanonicalTileID& tileID,
const std::vector<const RenderLayer*>& layers,
const CollisionTile* collisionTile,
- const GeometryTile& tile) const {
+ const float additionalQueryRadius) const {
// Determine query radius
const float pixelsToTileUnits = util::EXTENT / tileSize / scale;
- const int16_t additionalRadius = getAdditionalQueryRadius(layers, tile, pixelsToTileUnits);
+ const int16_t additionalRadius = std::min<int16_t>(util::EXTENT, additionalQueryRadius * pixelsToTileUnits);
// Query the grid index
mapbox::geometry::box<int16_t> box = mapbox::geometry::envelope(queryGeometry);
diff --git a/src/mbgl/geometry/feature_index.hpp b/src/mbgl/geometry/feature_index.hpp
index 380546c794..2ae7da33df 100644
--- a/src/mbgl/geometry/feature_index.hpp
+++ b/src/mbgl/geometry/feature_index.hpp
@@ -11,7 +11,6 @@
namespace mbgl {
-class GeometryTile;
class RenderedQueryOptions;
class RenderLayer;
@@ -44,7 +43,7 @@ public:
const CanonicalTileID&,
const std::vector<const RenderLayer*>&,
const CollisionTile*,
- const GeometryTile& tile) const;
+ const float additionalQueryRadius) const;
static optional<GeometryCoordinates> translateQueryGeometry(
const GeometryCoordinates& queryGeometry,
diff --git a/src/mbgl/tile/geometry_tile.cpp b/src/mbgl/tile/geometry_tile.cpp
index 0d01eba894..0e3c4c0476 100644
--- a/src/mbgl/tile/geometry_tile.cpp
+++ b/src/mbgl/tile/geometry_tile.cpp
@@ -219,6 +219,15 @@ void GeometryTile::queryRenderedFeatures(
if (!featureIndex || !data) 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));
+ }
+ }
+
featureIndex->query(result,
queryGeometry,
transformState.getAngle(),
@@ -229,7 +238,7 @@ void GeometryTile::queryRenderedFeatures(
id.canonical,
layers,
collisionTile.get(),
- *this);
+ additionalRadius);
}
void GeometryTile::querySourceFeatures(