From 65c922f580a1be1cc91ca1fa5c71a460bda39d4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89ric=20Lemoine?= Date: Mon, 2 Dec 2013 12:56:57 +0100 Subject: [PATCH] Add ol.renderer.canvas.VectorLayer#forEachFeatureAtPixel --- .../canvas/canvasvectorlayerrenderer.js | 30 +++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/src/ol/renderer/canvas/canvasvectorlayerrenderer.js b/src/ol/renderer/canvas/canvasvectorlayerrenderer.js index 010e9d5949..4fca4bdfe0 100644 --- a/src/ol/renderer/canvas/canvasvectorlayerrenderer.js +++ b/src/ol/renderer/canvas/canvasvectorlayerrenderer.js @@ -81,6 +81,32 @@ ol.renderer.canvas.VectorLayer.prototype.composeFrame = }; +/** + * @inheritDoc + */ +ol.renderer.canvas.VectorLayer.prototype.forEachFeatureAtPixel = + function(pixel, callback) { + if (!goog.isNull(this.replayGroup_)) { + goog.asserts.assert(!ol.extent.isEmpty(this.renderedExtent_)); + goog.asserts.assert(!isNaN(this.renderedResolution_)); + var coordinate = this.getMap().getCoordinateFromPixel(pixel); + var renderGeometryFunction = this.getRenderGeometryFunction_(); + goog.asserts.assert(goog.isFunction(renderGeometryFunction)); + this.replayGroup_.forEachGeometryAtCoordinate(this.renderedExtent_, + this.renderedResolution_, coordinate, renderGeometryFunction, + /** + * @param {ol.geom.Geometry} geometry Geometry. + * @param {Object} data Data. + */ + function(geometry, data) { + var feature = /** @type {ol.Feature} */ (data); + goog.asserts.assert(goog.isDef(feature)); + callback(feature); + }); + } +}; + + /** * @private * @return {function(ol.geom.Geometry): boolean|undefined} Render geometry @@ -199,12 +225,12 @@ ol.renderer.canvas.VectorLayer.prototype.renderFeature = this.handleImageStyleChange_, false, this); imageStyle.load(); } else if (imageStyle.imageState == ol.style.ImageState.LOADED) { - ol.renderer.vector.renderFeature(replayGroup, feature, style); + ol.renderer.vector.renderFeature(replayGroup, feature, style, feature); } goog.asserts.assert(imageStyle.imageState != ol.style.ImageState.IDLE); loading = imageStyle.imageState == ol.style.ImageState.LOADING; } else { - ol.renderer.vector.renderFeature(replayGroup, feature, style); + ol.renderer.vector.renderFeature(replayGroup, feature, style, feature); } } return loading;