summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/mbgl/style/style.cpp14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/mbgl/style/style.cpp b/src/mbgl/style/style.cpp
index 50de887dbc..522965b953 100644
--- a/src/mbgl/style/style.cpp
+++ b/src/mbgl/style/style.cpp
@@ -13,6 +13,7 @@
#include <mbgl/style/layers/raster_layer.hpp>
#include <mbgl/style/layer_impl.hpp>
#include <mbgl/style/parser.hpp>
+#include <mbgl/style/query_parameters.hpp>
#include <mbgl/style/transition_options.hpp>
#include <mbgl/style/class_dictionary.hpp>
#include <mbgl/style/update_parameters.hpp>
@@ -393,10 +394,23 @@ RenderData Style::getRenderData(MapDebugOptions debugOptions) const {
}
std::vector<Feature> Style::queryRenderedFeatures(const QueryParameters& parameters) const {
+ std::unordered_set<std::string> sourceFilter;
+
+ if (parameters.layerIDs) {
+ for (const auto& layerID : *parameters.layerIDs) {
+ auto layer = getLayer(layerID);
+ if (layer) sourceFilter.emplace(layer->baseImpl->source);
+ }
+ }
+
std::vector<Feature> result;
std::unordered_map<std::string, std::vector<Feature>> resultsByLayer;
for (const auto& source : sources) {
+ if (!sourceFilter.empty() && sourceFilter.find(source->getID()) == sourceFilter.end()) {
+ continue;
+ }
+
auto sourceResults = source->baseImpl->queryRenderedFeatures(parameters);
std::move(sourceResults.begin(), sourceResults.end(), std::inserter(resultsByLayer, resultsByLayer.begin()));
}