Skip to content

Commit

Permalink
Pre-filter sources for queryRenderFeatures (#2877)
Browse files Browse the repository at this point in the history
* Pre-filter sources for queryRenderFeatures

* Fix and add Style#queryRenderedFeature tests

* Simplify logic

* Restore O(# layers) perf
  • Loading branch information
anandthakker authored and lucaswoj committed Jul 18, 2016
1 parent 92a1c72 commit 2c5db34
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 1 deletion.
9 changes: 9 additions & 0 deletions js/style/style.js
Original file line number Diff line number Diff line change
Expand Up @@ -637,8 +637,17 @@ Style.prototype = util.inherit(Evented, {
this._handleErrors(validateStyle.filter, 'queryRenderedFeatures.filter', params.filter, true);
}

var includedSources = {};
if (params.layers) {
for (var i = 0; i < params.layers.length; i++) {
var layerId = params.layers[i];
includedSources[this._layers[layerId].source] = true;
}
}

var sourceResults = [];
for (var id in this.sources) {
if (params.layers && !includedSources[id]) continue;
var source = this.sources[id];
if (source.queryRenderedFeatures) {
sourceResults.push(source.queryRenderedFeatures(queryGeometry, params, zoom, bearing));
Expand Down
38 changes: 37 additions & 1 deletion test/js/style/style.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -906,6 +906,10 @@ test('Style#queryRenderedFeatures', function(t) {
"mapbox": {
"type": "vector",
"tiles": ["local://tiles/{z}-{x}-{y}.vector.pbf"]
},
"other": {
"type": "vector",
"tiles": ["local://tiles/{z}-{x}-{y}.vector.pbf"]
}
},
"layers": [{
Expand All @@ -928,13 +932,39 @@ test('Style#queryRenderedFeatures', function(t) {
"paint": {
"line-color": "blue"
}
}, {
"id": "land--other",
"type": "line",
"source": "other",
"source-layer": "water",
"layout": {
'line-cap': 'round'
},
"paint": {
"line-color": "red"
},
"metadata": {
"something": "else"
}
}]
});

style.on('load', function() {
style._applyClasses([]);
style._recalculate(0);

style.sources.other.queryRenderedFeatures = function(position, params) {
var features = {'land--other': []};
if (params.layers) {
for (var l in features) {
if (params.layers.indexOf(l) < 0) {
delete features[l];
}
}
}
return features;
};

style.sources.mapbox.queryRenderedFeatures = function(position, params) {
var features = {
'land': [{
Expand Down Expand Up @@ -977,7 +1007,7 @@ test('Style#queryRenderedFeatures', function(t) {
});

t.test('filters by `layers` option', function(t) {
var results = style.queryRenderedFeatures([{column: 1, row: 1, zoom: 1}], {layers: 'land'}, 0, 0);
var results = style.queryRenderedFeatures([{column: 1, row: 1, zoom: 1}], {layers: ['land']}, 0, 0);
t.equal(results.length, 2);
t.end();
});
Expand Down Expand Up @@ -1021,6 +1051,12 @@ test('Style#queryRenderedFeatures', function(t) {
t.end();
});

t.test('does not query sources not implicated by `layers` parameter', function (t) {
style.sources.mapbox.queryRenderedFeatures = function() { t.fail(); };
style.queryRenderedFeatures([{column: 1, row: 1, zoom: 1}], {layers: ['land--other']});
t.end();
});

t.end();
});
});
Expand Down

0 comments on commit 2c5db34

Please sign in to comment.