我正在使用传单L.esri.dynamicMapLayer
在地图上显示大量折线,而向ArcGIS Server导出它们的导出请求可能需要一段时间。如果用户快速制作多个缩放或平移,我最终会得到一堆待处理的导出请求,这也会阻止对ArcGIS Server的其他请求。除了最后一个之外的所有出口请求都是无用的。
对于其他客户端层,我已经通过确保用户已经停止缩放或平移至少2秒来控制刷新,然后自己刷新图层。如何对dynamicMapLayer
执行相同的操作,我可以暂停或停止自动刷新并在需要进行导出请求时自行决定吗?
请注意,我们无法使用切片来获得更好的性能,因为其他原因图层必须保持动态。
答案 0 :(得分:3)
如何阻止
dynamicMapLayer
在地图的每个缩放或平移上刷新?
你做不到。 It is designed that way
除非esri人重新设计制作L.GridLayer
的子类而不是L.ImageOverlay
,否则几乎没有办法解决它。
我已经通过确保用户已经停止缩放或平移至少2秒来控制刷新,然后自行刷新图层。如何对
dynamicMapLayer
进行相同的操作?
有一个可怕的,丑陋的黑客。覆盖私有L.Esri.DynamicMapLayer._update
方法,使其成为前一种方法的装饰器,例如类似的东西:
(function() {
var previousProto = L.Esri.DynamicMapLayer.prototype;
L.Esri.DynamicMapLayer.include({
_update: function(){
throttle(previousProto._update, 2000);
}
});
})();
它很难看,它反对大多数好的编码实践(覆盖私有方法,eeeew),它可能会破坏。
请注意,我们无法使用切片来获得更好的性能,因为其他原因图层必须保持动态。
我不同意。 "瓷砖"并不意味着"静态"。您可以轻松应用缓存清除,或使用time dimension或send all data to the client and let it slice it into vector tiles for quick rendering,或使用像Carto(DB)'s Torque这样的爱好者。
您的Esri工具不允许您轻松创建不同的磁贴集,或者不允许对不断变化的资源进行平铺访问,或者不允许触发客户端数据失效,这一事实并非如此。 ; t表示无法完成。