首页 文章

pan之后的OpenLayers .containsPoint

提问于
浏览
0

我好像遇到了一个错误,或者我忽略了一些东西 .

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

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

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

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

2 回答

  • 0

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

    完成平移后,OpenLayers.Control.DragPan会调用 Map . 如果你检查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);
    }
    

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

  • 2

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

相关问题