我一直在努力让用户在不拖动的情况下移动标记。基本上,用户点击标记并打开信息窗口气泡。泡泡是指向地图上设置点击事件的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以上的缩放级别错误地计算了移动。
有什么想法吗?
答案 0 :(得分: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);
});
干杯, 学家