首页 > 解决方案 > openlayers 聚类非常慢,位置不断变化

问题描述

在 openlayers (5/6) 中使用 clusterSource 时,我可以很好地聚类特征。

除了作为我的clustersource来源的vectorsource不断更改数据。我有一个 websockets,可以为我提供东西的位置(比如 Marinetrafic 中的船只或 flightradar24 上的飞机),我对底层源的每一次变化都有感觉,我的集群已经完成了。有没有办法邮寄更新?还是手动调用?

我可以缓冲输入流并一次处理更多的消息(比如每 3 秒更新 1000 个位置)并且我希望在处理完这 1000 条消息之后进行聚类。现在它变得如此缓慢,以至于我感觉每条消息都会发生(所以每 3 秒 1000 次)

另一个优化是只对当前可见的项目进行聚类(在聚类距离的边缘周围有一个缓冲区),在我看来这将节省大量计算。

这里有人可以帮助我吗?

现在我得到了这样的东西(在元代码中):

const features = {};  //my own reference collection
const buffer = [];  //it's get filled somewhere else (constantly)

function processBuffer() {

  //here we like to pause the clustering logic

  buffer.forEach(function(message){
    let feature = features[message.id];

    if (feature) {
      //existing feature
      feature.getGeometry().setCoordinates(message.coord);
    } else {
      //new feature
      feature = ... create feature ...
      vectorSource.addFeature(feature);
    }
  });

  //here we like to continue the clustering logic

  //reset buffer
  buffer.length = 0;
}

setInterval(processBuffer, 3000);

标签: javascriptopenlayers

解决方案


通过使用数组替换源中的所有功能,.clear()并且.addFeatures()应该更有效。


推荐阅读