diff --git a/src/ol/map.js b/src/ol/map.js index 061fb0bfd0..b184c60fa2 100644 --- a/src/ol/map.js +++ b/src/ol/map.js @@ -459,12 +459,19 @@ ol.Map.prototype.disposeInternal = function() { * @param {ol.Pixel} pixel Pixel. * @param {function(this: S, ol.Feature, ol.layer.Layer): T} callback Feature * callback. - * @param {S=} opt_obj Scope. + * @param {S=} opt_obj Scope for feature callback. + * @param {function(this: U, ol.layer.Layer): boolean=} opt_layerFunction Layer + * function, only layers which are visible and for which this function + * returns `true` will be tested for features. By default, all visible + * layers will be tested. + * @param {U=} opt_obj2 Scope for layer function. * @return {T|undefined} Callback result. - * @template S,T + * @template S,T,U */ -ol.Map.prototype.forEachFeatureAtPixel = function(pixel, callback, opt_obj) { - return this.renderer_.forEachFeatureAtPixel(pixel, callback, opt_obj); +ol.Map.prototype.forEachFeatureAtPixel = + function(pixel, callback, opt_obj, opt_layerFunction, opt_obj2) { + return this.renderer_.forEachFeatureAtPixel( + pixel, callback, opt_obj, opt_layerFunction, opt_obj2); }; diff --git a/src/ol/renderer/maprenderer.js b/src/ol/renderer/maprenderer.js index 35c1f5e55f..fac6bec51e 100644 --- a/src/ol/renderer/maprenderer.js +++ b/src/ol/renderer/maprenderer.js @@ -82,19 +82,24 @@ ol.renderer.Map.prototype.disposeInternal = function() { * @param {ol.Pixel} pixel Pixel. * @param {function(this: S, ol.Feature, ol.layer.Layer): T} callback Feature * callback. - * @param {S=} opt_obj Scope. + * @param {S=} opt_obj Scope for feature callback. + * @param {function(this: U, ol.layer.Layer): boolean=} opt_layerFunction Layer + * function. + * @param {U=} opt_obj2 Scope for layer function. * @return {T|undefined} Callback result. - * @template S,T + * @template S,T,U */ ol.renderer.Map.prototype.forEachFeatureAtPixel = - function(pixel, callback, opt_obj) { + function(pixel, callback, opt_obj, opt_layerFunction, opt_obj2) { + var layerFunction = goog.isDef(opt_layerFunction) ? + opt_layerFunction : goog.functions.TRUE; var layers = this.map_.getLayers(); if (goog.isDef(layers)) { var layersArray = layers.getArray(); var i; for (i = layersArray.length - 1; i >= 0; --i) { var layer = layersArray[i]; - if (layer.getVisible()) { + if (layer.getVisible() && layerFunction.call(opt_obj2, layer)) { var layerRenderer = this.getLayerRenderer(layer); var result = layerRenderer.forEachFeatureAtPixel(pixel, callback, opt_obj);