繁体   English   中英

如何防止dynamicMapLayer在地图的每个缩放或平移上刷新?

[英]How do I prevent a dynamicMapLayer from refreshing on every zoom or pan of the map?

我正在使用传单L.esri.dynamicMapLayer在地图上显示大量折线,并且向ArcGIS Server导出它们的导出请求可能需要一段时间。 如果用户快速制作多个缩放或平移,我最终会得到一堆待处理的导出请求,这也会阻止对ArcGIS Server的其他请求。 除了最后一个之外的所有那些导出请求都是无用的

对于其他客户端层,我已经通过确保用户已经停止缩放或平移至少2秒来控制刷新,然后自己刷新图层。 我如何为dynamicMapLayer做同样的dynamicMapLayer ,我可以暂停或停止自动刷新,并在我想要进行导出请求时自行决定吗?

请注意,由于其他原因,图层必须保持动态,因此我们无法使用图块来获得更好的性能。

如何防止dynamicMapLayer在地图的每个缩放或平移上刷新?

你不能。 它就是这样设计的

除非esri人重新设计制作L.GridLayer的子类而不是L.ImageOverlayL.ImageOverlay几乎没有办法解决它。

我已经通过确保用户已经停止缩放或平移至少2秒来控制刷新,然后自己刷新图层。 我如何为dynamicMapLayer做同样的dynamicMapLayer

有一个可怕的,丑陋的黑客。 覆盖私有的L.Esri.DynamicMapLayer._update方法,使其成为前一个方法的装饰器,例如:

(function() {
  var previousProto = L.Esri.DynamicMapLayer.prototype;
  L.Esri.DynamicMapLayer.include({
    _update: function(){
       throttle(previousProto._update, 2000);
    }
  });
})();

它很丑陋,它反对大多数好的编码实践(覆盖私有方法,eeeew),它可能会破坏。

请注意,由于其他原因,图层必须保持动态,因此我们无法使用图块来获得更好的性能。

我不同意。 “瓷砖”并不意味着“静止”。 您可以轻松应用缓存清除,或使用时间维度 ,或将所有数据发送到客户端,然后将其切片为矢量切片以便快速渲染 ,或者使用像Carto(DB)的Torque这样的更高级的东西。

您的Esri工具不允许您轻松创建不同的磁贴集,或者不允许平铺访问更改资源,或者不允许触发客户端数据失效,这并不意味着它不能实现。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM