[core] Pre-filter sources based on the layers they contain
This commit is contained in:
committed by
Thiago Marcos P. Santos
parent
105673efc1
commit
dd604a7b36
@@ -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()));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user