summaryrefslogtreecommitdiff
path: root/src/mbgl/geometry
diff options
context:
space:
mode:
authorJuha Alanen <juha.alanen@mapbox.com>2019-08-21 15:40:11 +0300
committerJuha Alanen <19551460+jmalanen@users.noreply.github.com>2019-09-18 14:29:15 +0300
commit598df1897dcad6f0a003fbae5d9058b1a660f408 (patch)
tree247106b5f0e622af07125927035fa763114dd570 /src/mbgl/geometry
parent8e19be9d9c7f66bff16f97066570e990fe09fd4e (diff)
downloadqtlocation-mapboxgl-598df1897dcad6f0a003fbae5d9058b1a660f408.tar.gz
[core] Add feature state support to queryRenderedFeatures API
Diffstat (limited to 'src/mbgl/geometry')
-rw-r--r--src/mbgl/geometry/feature_index.cpp24
-rw-r--r--src/mbgl/geometry/feature_index.hpp7
2 files changed, 24 insertions, 7 deletions
diff --git a/src/mbgl/geometry/feature_index.cpp b/src/mbgl/geometry/feature_index.cpp
index b76e02be3f..2601d60979 100644
--- a/src/mbgl/geometry/feature_index.cpp
+++ b/src/mbgl/geometry/feature_index.cpp
@@ -8,6 +8,7 @@
#include <mbgl/math/minmax.hpp>
#include <mbgl/style/filter.hpp>
#include <mbgl/tile/tile_id.hpp>
+#include <mbgl/renderer/source_state.hpp>
#include <mapbox/geometry/envelope.hpp>
@@ -48,7 +49,8 @@ void FeatureIndex::query(
const RenderedQueryOptions& queryOptions,
const UnwrappedTileID& tileID,
const std::unordered_map<std::string, const RenderLayer*>& layers,
- const float additionalQueryPadding) const {
+ const float additionalQueryPadding,
+ const SourceFeatureState& sourceFeatureState) const {
if (!tileData) {
return;
@@ -74,7 +76,7 @@ void FeatureIndex::query(
if (indexedFeature.sortIndex == previousSortIndex) continue;
previousSortIndex = indexedFeature.sortIndex;
- addFeature(result, indexedFeature, queryOptions, tileID.canonical, layers, queryGeometry, transformState, pixelsToTileUnits, posMatrix);
+ addFeature(result, indexedFeature, queryOptions, tileID.canonical, layers, queryGeometry, transformState, pixelsToTileUnits, posMatrix, &sourceFeatureState);
}
}
@@ -113,7 +115,7 @@ FeatureIndex::lookupSymbolFeatures(const std::vector<IndexedSubfeature>& symbolF
for (const auto& symbolFeature : sortedFeatures) {
mat4 unusedMatrix;
- addFeature(result, symbolFeature, queryOptions, tileID.canonical, layers, GeometryCoordinates(), {}, 0, unusedMatrix);
+ addFeature(result, symbolFeature, queryOptions, tileID.canonical, layers, GeometryCoordinates(), {}, 0, unusedMatrix, nullptr);
}
return result;
}
@@ -127,7 +129,8 @@ void FeatureIndex::addFeature(
const GeometryCoordinates& queryGeometry,
const TransformState& transformState,
const float pixelsToTileUnits,
- const mat4& posMatrix) const {
+ const mat4& posMatrix,
+ const SourceFeatureState* sourceFeatureState) const {
// Lazily calculated.
std::unique_ptr<GeometryTileLayer> sourceLayer;
@@ -148,6 +151,13 @@ void FeatureIndex::addFeature(
geometryTileFeature = sourceLayer->getFeature(indexedFeature.index);
assert(geometryTileFeature);
}
+ FeatureState state;
+ if (sourceFeatureState) {
+ optional<std::string> idStr = featureIDtoString(geometryTileFeature->getID());
+ if (idStr) {
+ sourceFeatureState->getState(state, sourceLayer->getName(), *idStr);
+ }
+ }
bool needsCrossTileIndex = renderLayer->baseImpl->getTypeInfo()->crossTileIndex == style::LayerTypeInfo::CrossTileIndex::Required;
if (!needsCrossTileIndex &&
@@ -159,7 +169,11 @@ void FeatureIndex::addFeature(
continue;
}
- result[layerID].emplace_back(convertFeature(*geometryTileFeature, tileID));
+ Feature feature = convertFeature(*geometryTileFeature, tileID);
+ feature.source = renderLayer->baseImpl->source;
+ feature.sourceLayer = sourceLayer->getName();
+ feature.state = state;
+ result[layerID].emplace_back(feature);
}
}
diff --git a/src/mbgl/geometry/feature_index.hpp b/src/mbgl/geometry/feature_index.hpp
index 1a212761fa..ab0cfea7db 100644
--- a/src/mbgl/geometry/feature_index.hpp
+++ b/src/mbgl/geometry/feature_index.hpp
@@ -16,6 +16,7 @@ namespace mbgl {
class RenderedQueryOptions;
class RenderLayer;
class TransformState;
+class SourceFeatureState;
class CollisionIndex;
@@ -68,7 +69,8 @@ public:
const RenderedQueryOptions& options,
const UnwrappedTileID&,
const std::unordered_map<std::string, const RenderLayer*>&,
- const float additionalQueryPadding) const;
+ const float additionalQueryPadding,
+ const SourceFeatureState& sourceFeatureState) const;
static optional<GeometryCoordinates> translateQueryGeometry(
const GeometryCoordinates& queryGeometry,
@@ -96,7 +98,8 @@ private:
const GeometryCoordinates& queryGeometry,
const TransformState& transformState,
const float pixelsToTileUnits,
- const mat4& posMatrix) const;
+ const mat4& posMatrix,
+ const SourceFeatureState* sourceFeatureState) const;
GridIndex<IndexedSubfeature> grid;
unsigned int sortIndex = 0;