diff --git a/js/data/feature_tree.js b/js/data/feature_tree.js index 75d286f3700..954037f39f9 100644 --- a/js/data/feature_tree.js +++ b/js/data/feature_tree.js @@ -155,12 +155,12 @@ FeatureTree.prototype.query = function(args, styleLayersByID, returnGeoJSON) { var matching = this.grid.query(minX - additionalRadius, minY - additionalRadius, maxX + additionalRadius, maxY + additionalRadius); matching.sort(topDown); var match = this.featureIndexArray.get(0); - this.filterMatching(result, matching, match, queryGeometry, filter, params.layerIDs, styleLayersByID, args.bearing, pixelsToTileUnits, returnGeoJSON); + this.filterMatching(result, matching, match, queryGeometry, filter, params.layers, styleLayersByID, args.bearing, pixelsToTileUnits, returnGeoJSON); var matchingSymbols = this.collisionTile.queryRenderedSymbols(minX, minY, maxX, maxY, args.scale); var match2 = this.collisionTile.collisionBoxArray.get(0); matchingSymbols.sort(); - this.filterMatching(result, matchingSymbols, match2, queryGeometry, filter, params.layerIDs, styleLayersByID, args.bearing, pixelsToTileUnits, returnGeoJSON); + this.filterMatching(result, matchingSymbols, match2, queryGeometry, filter, params.layers, styleLayersByID, args.bearing, pixelsToTileUnits, returnGeoJSON); return result; }; diff --git a/js/style/style.js b/js/style/style.js index 09895fa2b7d..cf6bf23de65 100644 --- a/js/style/style.js +++ b/js/style/style.js @@ -427,10 +427,6 @@ Style.prototype = util.inherit(Evented, { }, queryRenderedFeaturesAsync: function(queryGeometry, params, classes, zoom, bearing, callback) { - if (params.layer) { - params.layerIDs = Array.isArray(params.layer) ? params.layer : [params.layer]; - } - util.asyncAll(Object.keys(this.sources), function(id, callback) { var source = this.sources[id]; if (source.queryRenderedFeaturesAsync) { @@ -445,10 +441,6 @@ Style.prototype = util.inherit(Evented, { }, queryRenderedFeatures: function(queryGeometry, params, classes, zoom, bearing) { - if (params.layer) { - params.layerIDs = Array.isArray(params.layer) ? params.layer : [params.layer]; - } - var sourceResults = []; for (var id in this.sources) { var source = this.sources[id]; diff --git a/js/ui/map.js b/js/ui/map.js index 665f55ebce4..ddd8aa8149f 100644 --- a/js/ui/map.js +++ b/js/ui/map.js @@ -374,19 +374,19 @@ util.extend(Map.prototype, /** @lends Map.prototype */{ * * @param {Point|Array|Array|Array>} [pointOrBox] Either [x, y] pixel coordinates of a point, or [[x1, y1], [x2, y2]] pixel coordinates of opposite corners of bounding rectangle. Optional: use entire viewport if omitted. * @param {Object} params - * @param {string|Array} [params.layer] Only return features from a given layer or layers + * @param {Array} [params.layers] Only query features from layers with these layer IDs. * @param {Array} [params.filter] A mapbox-gl-style-spec filter. * @param {featuresCallback} callback function that receives the results * * @returns {Map} `this` * * @example - * map.queryRenderedFeaturesAsync([20, 35], { layer: 'my-layer-name' }, function(err, features) { + * map.queryRenderedFeaturesAsync([20, 35], { layers: ['my-layer-name'] }, function(err, features) { * console.log(features); * }); * * @example - * map.queryRenderedFeaturesAsync([[10, 20], [30, 50]], { layer: 'my-layer-name' }, function(err, features) { + * map.queryRenderedFeaturesAsync([[10, 20], [30, 50]], { layers: ['my-layer-name'] }, function(err, features) { * console.log(features); * }); */ @@ -406,16 +406,16 @@ util.extend(Map.prototype, /** @lends Map.prototype */{ * * @param {Point|Array|Array|Array>} [pointOrBox] Either [x, y] pixel coordinates of a point, or [[x1, y1], [x2, y2]] pixel coordinates of opposite corners of bounding rectangle. Optional: use entire viewport if omitted. * @param {Object} params - * @param {string|Array} [params.layer] Only return features from a given layer or layers + * @param {Array} [params.layers] Only query features from layers with these layer IDs. * @param {Array} [params.filter] A mapbox-gl-style-spec filter. * * @returns {Array} features - An array of [GeoJSON](http://geojson.org/) features matching the query parameters. The GeoJSON properties of each feature are taken from the original source. Each feature object also contains a top-level `layer` property whose value is an object representing the style layer to which the feature belongs. Layout and paint properties in this object contain values which are fully evaluated for the given zoom level and feature. * * @example - * var features = map.queryRenderedFeatures([20, 35], { layer: 'my-layer-name' }); + * var features = map.queryRenderedFeatures([20, 35], { layers: ['my-layer-name'] }); * * @example - * var features = map.queryRenderedFeaturesAsync([[10, 20], [30, 50]], { layer: 'my-layer-name' }); + * var features = map.queryRenderedFeaturesAsync([[10, 20], [30, 50]], { layers: ['my-layer-name'] }); */ queryRenderedFeatures: function(pointOrBox, params) { if (!(pointOrBox instanceof Point || Array.isArray(pointOrBox))) { diff --git a/test/js/style/style.test.js b/test/js/style/style.test.js index a752e64353f..cdc598f4fe0 100644 --- a/test/js/style/style.test.js +++ b/test/js/style/style.test.js @@ -966,9 +966,9 @@ test('Style#queryRenderedFeaturesAsync', function(t) { }] }; - if (params.layer) { + if (params.layers) { for (var l in features) { - if (params.layerIDs.indexOf(l) < 0) { + if (params.layers.indexOf(l) < 0) { delete features[l]; } } @@ -987,8 +987,8 @@ test('Style#queryRenderedFeaturesAsync', function(t) { }); }); - t.test('filters by `layer` option', function(t) { - style.queryRenderedFeaturesAsync([{column: 1, row: 1, zoom: 1}], {layer: 'land'}, {}, 0, 0, function(err, results) { + t.test('filters by `layers` option', function(t) { + style.queryRenderedFeaturesAsync([{column: 1, row: 1, zoom: 1}], {layers: 'land'}, {}, 0, 0, function(err, results) { t.error(err); t.equal(results.length, 2); t.end(); @@ -1039,7 +1039,7 @@ test('Style#queryRenderedFeaturesAsync', function(t) { }); t.test('include multiple layers', function(t) { - style.queryRenderedFeaturesAsync([{column: 1, row: 1, zoom: 1}], {layer: ['land', 'landref']}, {}, 0, 0, function(err, results) { + style.queryRenderedFeaturesAsync([{column: 1, row: 1, zoom: 1}], {layers: ['land', 'landref']}, {}, 0, 0, function(err, results) { t.error(err); t.equals(results.length, 3); t.end();