簡體   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