我似乎遇到了一个错误,或者我忽视了一些事情。
我编写了一些代码,用于枚举OpenLayers Vector图层上的所有矢量要素 - 检查鼠标是否在矢量要素中 - 如果是,则根据该要素显示一些信息。
我必须编写自己的方法来执行此操作,因为现有的OpenLayers控件(选择等)在找到鼠标下的功能后停止,并且我可能会将多个功能堆叠在一起。
我的问题是.containsPoint方法似乎是在'pan'之前使用coords。 放大或缩小后几何体似乎在正确的位置,当我在地图上挥动鼠标时,.containsPoint正常工作。
在平移地图以更新某些内容(要素的几何图形)后,是否需要执行某些操作
答案 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?