Hit detection respects min and maxResolution

This commit is contained in:
Éric Lemoine
2014-05-23 16:44:43 +02:00
parent 81523091f0
commit fd8a46dcae
5 changed files with 72 additions and 9 deletions

View File

@@ -10,6 +10,7 @@ goog.require('ol');
goog.require('ol.css');
goog.require('ol.dom');
goog.require('ol.layer.Image');
goog.require('ol.layer.Layer');
goog.require('ol.layer.Tile');
goog.require('ol.layer.Vector');
goog.require('ol.render.Event');
@@ -160,10 +161,8 @@ ol.renderer.canvas.Map.prototype.renderFrame = function(frameState) {
layer = layerState.layer;
layerRenderer = this.getLayerRenderer(layer);
goog.asserts.assertInstanceof(layerRenderer, ol.renderer.canvas.Layer);
if (!layerState.visible ||
layerState.sourceState != ol.source.State.READY ||
viewResolution >= layerState.maxResolution ||
viewResolution < layerState.minResolution) {
if (!ol.layer.Layer.visibleAtResolution(layerState, viewResolution) ||
layerState.sourceState != ol.source.State.READY) {
continue;
}
layerRenderer.prepareFrame(frameState, layerState);

View File

@@ -99,11 +99,13 @@ ol.renderer.Map.prototype.forEachFeatureAtPixel =
layerFilter, thisArg2) {
var layerStates = this.map_.getLayerGroup().getLayerStatesArray();
var numLayers = layerStates.length;
var viewResolution = frameState.view2DState.resolution;
var i;
for (i = numLayers - 1; i >= 0; --i) {
var layerState = layerStates[i];
var layer = layerState.layer;
if (layerState.visible && layerFilter.call(thisArg2, layer)) {
if (ol.layer.Layer.visibleAtResolution(layerState, viewResolution) &&
layerFilter.call(thisArg2, layer)) {
var layerRenderer = this.getLayerRenderer(layer);
var result = layerRenderer.forEachFeatureAtPixel(
coordinate, frameState, callback, thisArg);

View File

@@ -17,6 +17,7 @@ goog.require('ol.Tile');
goog.require('ol.css');
goog.require('ol.dom');
goog.require('ol.layer.Image');
goog.require('ol.layer.Layer');
goog.require('ol.layer.Tile');
goog.require('ol.render.Event');
goog.require('ol.render.EventType');
@@ -442,10 +443,8 @@ ol.renderer.webgl.Map.prototype.renderFrame = function(frameState) {
var i, ii, layerState;
for (i = 0, ii = layerStatesArray.length; i < ii; ++i) {
layerState = layerStatesArray[i];
if (layerState.visible &&
layerState.sourceState == ol.source.State.READY &&
viewResolution < layerState.maxResolution &&
viewResolution >= layerState.minResolution) {
if (ol.layer.Layer.visibleAtResolution(layerState, viewResolution) &&
layerState.sourceState == ol.source.State.READY) {
layerStatesToDraw.push(layerState);
}
}