【问题标题】:Realtime data and Openlayers 3: Batch moving features实时数据和 Openlayers 3:批量移动功能
【发布时间】:2014-12-17 23:16:36
【问题描述】:

我有一个我想在矢量图层中使用的哈希表,所以这就是我所做的:

var make = [], remove = [];
for (var key in data) {
  var val = data[key];
  if (featureCache[key]) {
    if (val._ts > featureCache[key]._ts) {
      var geom = featureCache[key].getGeometry();

问题从这里开始。从我目前发现的情况来看,我有两个选择:

      geom.setCoordinates(latlng([val.Latitude, val.Longitude]));
      geom.flatCoordinates = latlng([val.Latitude, val.Longitude]);

但是第一个冒泡并渲染地图,这是一个问题,因为我有超过 1500 个功能,并且我计划使用更多。 第二行给我断言失败,我不知道如何调试它。

      featureCache[key]._ts = val._ts;
    }
  } else {
    make.push(featureCache[key] =
      new ol.Feature({
        geometry: new ol.geom.Point(latlng([val.Latitude,val.Longitude]))
      })
    );
    featureCache[key]._ts = val._ts;
  }
}
source.addFeatures(make);

这需要每隔一秒左右运行一次,因为我希望数据尽可能实时。

如果这是一种非常愚蠢的做法,我也想知道。

【问题讨论】:

    标签: javascript batch-processing openlayers-3


    【解决方案1】:

    我不确定您如何使用新 API 做到这一点,但您可以试试这个:

    1. 克隆一个旧的几何图形并对其进行更新,对每个都执行此操作
    2. 将克隆添加到 OL 不知道的集合中(避免地图渲染/更新)
    3. 该集合准备就绪后,从 OL 中删除旧集合并设置新的(批处理)

    在“现代”浏览器上对数千个项目执行此操作应该很快,因为您只需设置一次。关键是要避免在更新每个条目时触发更新。

    也许有办法避免冒泡/事件以允许批量更新(每次更改都不会触发地图渲染)?

    【讨论】:

      猜你喜欢
      • 2021-01-17
      • 1970-01-01
      • 1970-01-01
      • 2016-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-15
      相关资源
      最近更新 更多