diff options
author | John Firebaugh <john.firebaugh@gmail.com> | 2017-08-12 12:19:45 -0700 |
---|---|---|
committer | John Firebaugh <john.firebaugh@gmail.com> | 2017-08-24 13:06:23 -0700 |
commit | d26559bb28b0b1803730cc52c92a0747ddc172e7 (patch) | |
tree | e0e6a1e717ccb36a0318541ead84fdebf4dad878 /src | |
parent | e706ed4b2ee8d73e17146b33b2c91463b7186777 (diff) | |
download | qtlocation-mapboxgl-d26559bb28b0b1803730cc52c92a0747ddc172e7.tar.gz |
[core] Avoid GeometryTile dependency in FeatureIndex
Diffstat (limited to 'src')
-rw-r--r-- | src/mbgl/geometry/feature_index.cpp | 23 | ||||
-rw-r--r-- | src/mbgl/geometry/feature_index.hpp | 3 | ||||
-rw-r--r-- | src/mbgl/tile/geometry_tile.cpp | 11 |
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( |