0

我似乎遇到了一个错误,或者我忽略了一些东西。

我编写了一些代码来枚举 OpenLayers 矢量图层上的所有矢量特征 - 检查鼠标是否在矢量特征内 - 如果是,那么它会根据该特征显示一些信息。

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

我的问题是 .containsPoint 方法似乎使用了“平移”之前的坐标。放大或缩小后,几何图形似乎在正确的位置,当我在地图上挥动鼠标时 .containsPoint 工作正常。

平移地图以更新某些内容(要素的几何图形)后,我是否需要做某事

4

2 回答 2

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);
}

......事情应该为你神奇地工作。

于 2010-04-06T03:45:55.797 回答
0

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

于 2009-07-23T16:47:41.010 回答