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

时间:2016-10-28 14:01:07

标签: javascript leaflet arcgis esri

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

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

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

1 个答案:

答案 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 dimensionsend all data to the client and let it slice it into vector tiles for quick rendering,或使用像Carto(DB)'s Torque这样的爱好者。

您的Esri工具不允许您轻松创建不同的磁贴集,或者不允许对不断变化的资源进行平铺访问,或者不允许触发客户端数据失效,这一事实并非如此。 ; t表示无法完成。