openlayers marker moveTo仅在特定缩放级别准确

时间:2011-03-02 16:55:09

标签: javascript openlayers marker

我一直在努力让用户在不拖动的情况下移动标记。基本上,用户点击标记并打开信息窗口气泡。泡泡是指向地图上设置点击事件的javascript函数的链接。当用户点击地图上的某个位置时,应该将标记移动到点击的位置。

在我的地图中,我有18个缩放级别。在缩放级别15,此过程完美地运行。如果我在单击一次后放大,标记仍会移动到我单击的位置。但是,如果我刷新并在缩放级别16重新开始并尝试单击某处,标记将移动到更高,更左侧的位置。在更高的缩放级别重复此过程,标记会在地图上向上和向左移动(距离)。

在缩放级别低于15的情况下执行上述操作也很合适。

以下是代码片段:

lmLayer = new OpenLayers.Layer.Markers("Landmark Creation");
map.addLayer(lmLayer);
var marker = landmark['landmark_1234'];// this just pulls the marker out of storage
map.events.register("click", lmLayer, function(evt){
    var pixel = new OpenLayers.Pixel(evt.clientX,evt.clientY);
    marker.moveTo(pixel);
    OpenLayers.Event.stop(evt);
});

我有控制台注销了clientX和clientY点击,他们确实从浏览器的左上边缘注册了正确的x / y坐标。但似乎OL在15以上的缩放级别错误地计算了移动。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

在等待错误更正时进行一些解决方法

lmLayer = new OpenLayers.Layer.Markers("Landmark Creation");
map.addLayer(lmLayer);
var marker = landmark['landmark_1234'];

map.events.register("click", lmLayer, function(evt){
    var pixel = new OpenLayers.Pixel(evt.clientX,evt.clientY);
    marker.lonlat = pixel;
    marker.moveTo(pixel);
    // workaround
    marker.draw();
    lmLayer.redraw();
    OpenLayers.Event.stop(evt);
});

干杯, 学家