2017-02-15 45 views
0

我從ArcGIS網絡服務器中讀取imageOverlay URL,該URL使用傳單getBound()座標作爲URL的一部分(我們有爲當前窗口範圍過濾的大型地圖)。不包括實際路徑的道歉(我正在處理敏感的客戶端數據)。例如:對於傳單,沒有setBounds函數imageOverlay

http://myarcgiswebserver.com/MapServer/export/dpi=96&format=png32&bbox=27.119750976562504%2C-31.194007509998823%2C32.39044189453126%2C-29.692824739380754&size=1719%2C434

[BBOX] =電流imageBounds

當拖着地圖imageOverlay網址正確更新,但我的傳單窗口不再對準第一次被添加時設置的imageBound值imageOverlay導致一個扭曲的輸出(這是我的假設):

image of skewed results when i drag my map

唯一的解決方法是刪除現有imageOverlay並添加一個新的(當地圖消失時會遺失用戶體驗,然後每次窗口被拖動或縮放時都會重新出現)。

我是不是正確地接近這個問題,或者會引入一個函數來更新當前的imageBounds解決這個問題?也許不是一個新的功能,但擴展setUrl與額外的參數...?

非常感謝任何反饋...

+0

你如何在地圖上添加你的'imageOverlay'?如果我理解正確,它不隨地圖移動,因此當用戶拖動/縮放時,它不再對齊? – ghybs

+0

嗨,它確實隨地圖一起移動,但我在縮放或拖動後強制刷新(URL)以確保高質量的imageOverlay(適合新地圖區域)。不幸的是,使用setUrl會導致錯位。去除層和添加新imageOverlay只有當對準正確 –

+0

您也可以考慮「ESRI單張」 L.esri.dynamicMapLayer http://esri.github.io/esri-leaflet/examples/simple-dynamic-map-layer html的 –

回答

1

由於@ghybs指出,你的使用情況可能會更好地使用你的ArcGIS Server的WMS 接口服務。

無論如何,你說

唯一的解決方法是刪除現有imageOverlay,並添加一個新的(如地圖上消失,那麼每個窗口拖動或縮放時再次出現,其破壞了用戶體驗)。

嗯,這干擾是由於你可能做這樣的事情:

  • 刪除舊的覆蓋
  • 添加新的覆蓋
  • 等到從網絡
  • 等待接收的圖像一幀,因此新的覆蓋被示

和代替溜溜ü應該做這樣的事情:

  • 添加新的覆蓋
  • 等到從網絡
  • 刪除舊的覆蓋
  • 接收的圖像等待一幀所以新的覆蓋顯示

問題只是異步等待和那裏可能的競爭條件,但應該很容易在一起,例如:

var activeOverlay = null; 
var overlayInRequest = null; 

map.on('moveend zoomend', { 

    // If we are already requesting a new overlay, ignore it. 
    // This might need some additional debouncing logic to prevent 
    // lots of concurrent requests 
    if (overlayInRequest) { 
     overlayInRequest.off('load', showOverlay); 
    } 

    overlayInRequest = L.imageOverlay(computeUrl(map.getBounds()), myOverlayOptions); 
    overlayInRequest.on('load', showOverlay); 
}); 

function showOverlay(ev) { 
    activeOverlay.remove(); 
    activeOverlay = overlayInRequest; 
    activeOverlay.addTo(map); 
    overlayInRequest = undefined; 
} 
+0

伊萬嗨,看到我們使用ArcGIS企業版我會盡力推動WMS,而不是一個解決辦法,也許更可持續的。非常感謝您的投入和反饋! –

1

如果使用ImageOverlay但改變其url動態,以反映新的邊界框的新形象,那麼確實是對您所描述的行爲的原因:您顯示的圖像已使用新的bbox生成,但位於初始的bbox中,因爲圖像疊加層保留在地圖上的相同地理位置。我想你應該使用TileLayer.WMS

它會自動爲您管理邊界框更新。不過,您可能需要找到正確的選項以適合您的服務提供商所需的URL語法。

例子:http://playground-leaflet.rhcloud.com/yel/1/edit?html,output

+1

讓我指出,有一個[WMS傳單教程](http://leafletjs.com/examples/wms/wms.html),這可能將是這個有用的。 – IvanSanchez

+0

非常感謝!會給它嘗試。 .. –