我一直在研究一种让用户无需拖动即可移动标记的方法。基本上,用户单击标记并打开信息窗口气泡。气泡中是指向在地图上设置点击事件的 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。
有任何想法吗?