diff options
author | Thiago Marcos P. Santos <thiago@mapbox.com> | 2016-10-04 15:51:00 +0300 |
---|---|---|
committer | Thiago Marcos P. Santos <tmpsantos@gmail.com> | 2016-10-05 11:12:16 +0300 |
commit | dd604a7b3650617ab3fef81eef1a63fc28761396 (patch) | |
tree | 7baa9cce586a3351455ec9e8e8db6b4723644fa4 /src/mbgl | |
parent | 105673efc1c59e19f5352fb770405aa591cdebeb (diff) | |
download | qtlocation-mapboxgl-dd604a7b3650617ab3fef81eef1a63fc28761396.tar.gz |
[core] Pre-filter sources based on the layers they contain
Diffstat (limited to 'src/mbgl')
-rw-r--r-- | src/mbgl/style/style.cpp | 14 |
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())); } |