Determine the callback count while iterating through all layers
Previously, if a layer didn't have a `getFeature*ForPixel` type method, the loop count would be decremented. This means that all layers would not be considered. Instead, the callback count should be incremented before requests are made and decremented in the callback.
This commit is contained in:
@@ -92,9 +92,7 @@ var vector = new ol.layer.Vector({
|
||||
})
|
||||
});
|
||||
|
||||
var select = new ol.interaction.Select({
|
||||
layers: [vector]
|
||||
});
|
||||
var select = new ol.interaction.Select();
|
||||
|
||||
var modify = new ol.interaction.Modify();
|
||||
|
||||
|
||||
@@ -47,9 +47,7 @@ var vector = new ol.layer.Vector({
|
||||
})
|
||||
});
|
||||
|
||||
var select = new ol.interaction.Select({
|
||||
layers: [vector]
|
||||
});
|
||||
var select = new ol.interaction.Select();
|
||||
|
||||
var map = new ol.Map({
|
||||
interactions: ol.interaction.defaults().extend([select]),
|
||||
|
||||
@@ -113,10 +113,11 @@ ol.renderer.Map.prototype.getFeatureInfoForPixel =
|
||||
function(pixel, layers, success, opt_error) {
|
||||
var numLayers = layers.length;
|
||||
var featureInfo = new Array(numLayers);
|
||||
var callbackCount = 0;
|
||||
var callback = function(layerFeatureInfo, layer) {
|
||||
featureInfo[goog.array.indexOf(layers, layer)] = layerFeatureInfo;
|
||||
--numLayers;
|
||||
if (!numLayers) {
|
||||
--callbackCount;
|
||||
if (callbackCount <= 0) {
|
||||
success(featureInfo);
|
||||
}
|
||||
};
|
||||
@@ -126,9 +127,8 @@ ol.renderer.Map.prototype.getFeatureInfoForPixel =
|
||||
layer = layers[i];
|
||||
layerRenderer = this.getLayerRenderer(layer);
|
||||
if (goog.isFunction(layerRenderer.getFeatureInfoForPixel)) {
|
||||
++callbackCount;
|
||||
layerRenderer.getFeatureInfoForPixel(pixel, callback, opt_error);
|
||||
} else {
|
||||
--numLayers;
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -149,10 +149,11 @@ ol.renderer.Map.prototype.getFeaturesForPixel =
|
||||
function(pixel, layers, success, opt_error) {
|
||||
var numLayers = layers.length;
|
||||
var features = new Array(numLayers);
|
||||
var callbackCount = 0;
|
||||
var callback = function(layerFeatures, layer) {
|
||||
features[goog.array.indexOf(layers, layer)] = layerFeatures;
|
||||
--numLayers;
|
||||
if (!numLayers) {
|
||||
--callbackCount;
|
||||
if (callbackCount <= 0) {
|
||||
success(features);
|
||||
}
|
||||
};
|
||||
@@ -162,9 +163,8 @@ ol.renderer.Map.prototype.getFeaturesForPixel =
|
||||
layer = layers[i];
|
||||
layerRenderer = this.getLayerRenderer(layer);
|
||||
if (goog.isFunction(layerRenderer.getFeaturesForPixel)) {
|
||||
++callbackCount;
|
||||
layerRenderer.getFeaturesForPixel(pixel, callback, opt_error);
|
||||
} else {
|
||||
--numLayers;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user