pan之后的OpenLayers .containsPoint

时间:2009-04-29 12:49:07

标签: openlayers

我似乎遇到了一个错误,或者我忽视了一些事情。

我编写了一些代码,用于枚举OpenLayers Vector图层上的所有矢量要素 - 检查鼠标是否在矢量要素中 - 如果是,则根据该要素显示一些信息。

我必须编写自己的方法来执行此操作,因为现有的OpenLayers控件(选择等)在找到鼠标下的功能后停止,并且我可能会将多个功能堆叠在一起。

我的问题是.containsPoint方法似乎是在'pan'之前使用coords。 放大或缩小后几何体似乎在正确的位置,当我在地图上挥动鼠标时,.containsPoint正常工作。

在平移地图以更新某些内容(要素的几何图形)后,是否需要执行某些操作

2 个答案:

答案 0 :(得分:2)

我意识到这个问题几乎已经过了它的第一个生日,而且它可能不再有效,但无论如何我都会试着回答它。

OpenLayers.Control.DragPan在您完成平移后调用地图。如果检查OpenLayers.Map平移功能,您将在内部看到此注释:

// only call setCenter if not dragging or there has been a change

该函数中的以下逻辑反映了此注释。

所以是的,每次你完成平移你都需要做类似的事情:

dragpan.handler.up = function(evt)
{
    dx = dragpan.handler.last.x - evt.x;
    dy = dragpan.handler.last.y - evt.y;
    var centerPx = map.getViewPortPxFromLonLat(map.getCenter());
    var newCenterPx = centerPx.add(dx, dy);
    var newCenterLonLat = map.getLonLatFromViewPortPx(newCenterPx);
    map.setCenter(map.getCenter() + dragpan.handler.xy);
}

......事情应该神奇地适合你。

答案 1 :(得分:0)

如果没有示例代码段,则很难回答这个问题。 OpenLayers能够通过鼠标单击选择多个对象。你有没有尝试过OpenLayers 2.8?