3

我一直在研究一种让用户无需拖动即可移动标记的方法。基本上,用户单击标记并打开信息窗口气泡。气泡中是指向在地图上设置点击事件的 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 以上的缩放级别错误地计算了 moveTo。

有任何想法吗?

4

1 回答 1

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

干杯,J。

于 2011-03-08T15:29:12.753 回答