From 0238fa54de9840fdd238080977c6669cab218c0e Mon Sep 17 00:00:00 2001 From: ahocevar Date: Wed, 20 Nov 2013 13:05:06 +0100 Subject: [PATCH 1/2] The source determines who can do GetFeatureInfo Now that the ol.renderer.Layer base class has a getFeatureInfoForPixel method, we have to check whether the source supports GetFeatureInfo, not the layer renderer. --- src/ol/renderer/maprenderer.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/ol/renderer/maprenderer.js b/src/ol/renderer/maprenderer.js index a0463fc944..231a155228 100644 --- a/src/ol/renderer/maprenderer.js +++ b/src/ol/renderer/maprenderer.js @@ -122,12 +122,13 @@ ol.renderer.Map.prototype.getFeatureInfoForPixel = } }; - var layer, layerRenderer; + var layer, layerRenderer, source; for (var i = 0; i < numLayers; ++i) { layer = layers[i]; - layerRenderer = this.getLayerRenderer(layer); - if (goog.isFunction(layerRenderer.getFeatureInfoForPixel)) { + source = layer.getSource(); + if (goog.isFunction(source.getFeatureInfoForPixel)) { ++callbackCount; + layerRenderer = this.getLayerRenderer(layer); layerRenderer.getFeatureInfoForPixel(pixel, callback, opt_error); } } From b8a9aeb14ed6089d9d676c7e8682f0db5a6d5304 Mon Sep 17 00:00:00 2001 From: ahocevar Date: Wed, 20 Nov 2013 16:05:00 +0100 Subject: [PATCH 2/2] Avoid source check in map renderer By returning true or false from the layer renderer's getFeatureInfoForPixel method, we know whether the source supports GetFeatureInfo or not. --- src/ol/renderer/layerrenderer.js | 4 ++++ src/ol/renderer/maprenderer.js | 9 +++------ 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/ol/renderer/layerrenderer.js b/src/ol/renderer/layerrenderer.js index 8dc5cf489a..64627e09b7 100644 --- a/src/ol/renderer/layerrenderer.js +++ b/src/ol/renderer/layerrenderer.js @@ -48,17 +48,21 @@ goog.inherits(ol.renderer.Layer, goog.Disposable); * successful queries. The passed arguments are the resulting feature * information and the layer. * @param {function()=} opt_error Callback for unsuccessful queries. + * @return {boolean} Whether getFeatureInfoForPixel was called on the source. */ ol.renderer.Layer.prototype.getFeatureInfoForPixel = function(pixel, success, opt_error) { var layer = this.getLayer(); var source = layer.getSource(); + var haveGetFeatureInfo = false; if (goog.isFunction(source.getFeatureInfoForPixel)) { var callback = function(layerFeatureInfo) { success(layerFeatureInfo, layer); }; source.getFeatureInfoForPixel(pixel, this.getMap(), callback, opt_error); + haveGetFeatureInfo = true; } + return haveGetFeatureInfo; }; diff --git a/src/ol/renderer/maprenderer.js b/src/ol/renderer/maprenderer.js index 231a155228..f02a33f6fd 100644 --- a/src/ol/renderer/maprenderer.js +++ b/src/ol/renderer/maprenderer.js @@ -122,14 +122,11 @@ ol.renderer.Map.prototype.getFeatureInfoForPixel = } }; - var layer, layerRenderer, source; + var layerRenderer; for (var i = 0; i < numLayers; ++i) { - layer = layers[i]; - source = layer.getSource(); - if (goog.isFunction(source.getFeatureInfoForPixel)) { + layerRenderer = this.getLayerRenderer(layers[i]); + if (layerRenderer.getFeatureInfoForPixel(pixel, callback, opt_error)) { ++callbackCount; - layerRenderer = this.getLayerRenderer(layer); - layerRenderer.getFeatureInfoForPixel(pixel, callback, opt_error); } } };