2011-03-02 47 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.

相關問題