2011-03-02 152 views
3

我一直在努力让用户移动标记而不拖动。基本上,用户点击标记并打开信息窗口泡泡。在泡泡中是指向地图上设置点击事件的JavaScript函数的链接。当用户在地图上的某处点击时,应该将标记移动到点击位置。openlayers标记moveTo只在特定的缩放级别准确

在我的地图中,我有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从浏览器的左侧和顶部边缘坐标。但它似乎是错误的计算moveTo在缩放级别15.

任何想法?

+0

什么坐标系?他们是如何申报的? – 2011-03-15 11:36:24

回答

1

一点点的解决方法,而您使用的地图和标记层等待的bug修正

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.

相关问题