我正在从ArcGIS网络服务器上读取imageOverlay网址,该网页服务器使用小册子getBound()坐标作为网址的一部分(我们有针对当前窗口过滤的大型地图'范围') 。抱歉不包括实际路径(我使用敏感客户端数据)。例如:
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网址会正确更新,但我的传单窗口不再与第一次添加imageOverlay时设置的imageBound值对齐,导致输出偏斜(这是我的假设):
唯一的解决方法是删除现有的imageOverlay并添加一个新的(当地图消失时会破坏用户体验,然后每次拖动或缩放窗口时重新出现)。
我是否正确接近此问题,或者是否会引入更新当前imageBounds的函数来解决此问题?也许不是一个新功能,而是使用附加参数扩展setUrl ......?
非常感谢任何反馈......
答案 0 :(得分:1)
如果您使用ImageOverlay
但动态更改其url
,并使用反映新边界框的新图像,那么确实这就是您描述的行为的原因:您显示的图像是已使用新bbox
生成,但位于初始bbox
,因为图片叠加层仍保留在地图上的相同地理位置。
相反,我觉得你应该使用TileLayer.WMS
。
它会自动为您管理边界框更新。但是,您可能需要找到适合您的服务提供商所需URL语法的正确选项。
示例:http://playground-leaflet.rhcloud.com/yel/1/edit?html,output
答案 1 :(得分:1)
正如@ghybs指出的那样,使用WMS可以更好地服务于您的用例 ArcGIS服务器的界面。
无论如何,你说
唯一的解决方法是删除现有的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;
}