gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 15:51:25 24 4
gpt4 key购买 nike

我一直在研究一种让用户无需拖动即可移动标记的方法。基本上,用户单击标记并打开信息窗口气泡。气泡中是指向在 map 上设置点击事件的 javascript 函数的链接。当用户点击 map 上的某处时,它应该将标记移动到点击的点。

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

在低于 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。

有什么想法吗?

最佳答案

等待错误修正时的一些解决方法

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.

关于javascript - openlayers marker moveTo 仅在特定缩放级别准确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5170722/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com