【问题标题】:openlayers marker moveTo only accurate at a specific zoom levelopenlayers 标记 moveTo 仅在特定缩放级别准确
【发布时间】:2011-03-02 16:55:09
【问题描述】:

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

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

在低于 15 的缩放级别上执行上述操作也可以正常工作。

这是代码的sn-p:

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。

有什么想法吗?

【问题讨论】:

  • 地图和标记层使用什么坐标系?它们是如何声明的?

标签: javascript openlayers marker


【解决方案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.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-18
    相关资源
    最近更新 更多