繁体   English   中英

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

[英]openlayers marker moveTo only accurate at a specific zoom level

我一直在努力让用户在不拖动的情况下移动标记。 基本上,用户点击标记并打开信息窗口气泡。 泡泡是指向地图上设置点击事件的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以上的缩放级别上错误地计算了move。

有任何想法吗?

在等待错误纠正时稍微解决一下

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。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM