我一直在研究一种不用拖动就可以移动标记的方法,基本上,用户点击标记,信息窗口会弹出。窗口中有一个链接到javascript函数的链接,该函数在地图上设置了一个点击事件。当用户在地图上某处单击时,标记应该移动到单击点。
我的地图有18个缩放级别。在缩放级别15,这个过程完美地工作。如果我在单击一次之后再缩放,标记仍然会移动到我单击的位置。但是,如果我重新刷新并从缩放级别16开始,试图单击某个位置,标记将被移动到一个更高且更向左的位置。在更高的缩放级别上重复此过程,标记在地图上的移动距离越来越远。
在较低的缩放级别下进行以上操作也能正常运行。
以下是代码片段:
我的地图有18个缩放级别。在缩放级别15,这个过程完美地工作。如果我在单击一次之后再缩放,标记仍然会移动到我单击的位置。但是,如果我重新刷新并从缩放级别16开始,试图单击某个位置,标记将被移动到一个更高且更向左的位置。在更高的缩放级别上重复此过程,标记在地图上的移动距离越来越远。
在较低的缩放级别下进行以上操作也能正常运行。
以下是代码片段:
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)的点击位置,确保它们正确地在浏览器左侧和顶部边缘上注册。但是,在缩放级别超过15时,似乎OpenLayers(OL)正在错误计算 moveTo。
你有什么想法吗?