2

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

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);

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

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

4

1 回答 1

2

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

  1. 克隆一个旧的几何图形并更新它,为每个
  2. 将克隆添加到 OL 不知道的集合中(避免地图渲染/更新)
  3. 一旦该集合准备就绪,从 OL 中删除旧集合并设置新的(批次)

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

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

于 2014-10-23T09:31:15.223 回答