[core] fix querying circles across tile boundaries

This commit is contained in:
Chris Loer
2018-04-02 17:41:09 -07:00
committed by Ansis Brammanis
parent 0767bf0686
commit f7d20a5871
7 changed files with 30 additions and 16 deletions

View File

@@ -201,6 +201,17 @@ Bucket* GeometryTile::getBucket(const Layer::Impl& layer) const {
return it->second.get();
}
float GeometryTile::getQueryPadding(const std::vector<const RenderLayer*>& layers) {
float queryPadding = 0;
for (const RenderLayer* layer : layers) {
auto bucket = getBucket(*layer->baseImpl);
if (bucket) {
queryPadding = std::max(queryPadding, bucket->getQueryRadius(*layer));
}
}
return queryPadding;
}
void GeometryTile::queryRenderedFeatures(
std::unordered_map<std::string, std::vector<Feature>>& result,
const GeometryCoordinates& queryGeometry,
@@ -210,14 +221,7 @@ void GeometryTile::queryRenderedFeatures(
if (!getData()) 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));
}
}
const float queryPadding = getQueryPadding(layers);
latestFeatureIndex->query(result,
queryGeometry,
@@ -227,7 +231,7 @@ void GeometryTile::queryRenderedFeatures(
options,
id.toUnwrapped(),
layers,
additionalRadius);
queryPadding);
}
void GeometryTile::querySourceFeatures(