javascript - openlayers 集群非常慢,位置不断变化

标签 javascript openlayers

在 openlayers (5/6) 中使用 clusterSource 时,我可以很好地对功能进行聚类。

除了作为我的 clustersource 源的矢量源不断更改数据。 我有一个 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);

最佳答案

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

关于javascript - openlayers 集群非常慢,位置不断变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59628754/

相关文章:

google-maps - OpenLayers + 谷歌广告

javascript - 是否可以使用不同投影的另一个 WMS 图层显示 OSM 数据?

javascript - 在 Meteor.method 中调用函数返回未定义

javascript - 直接访问空对象 {} 上的属性时出现语法错误

javascript - OpenLayers:IE:SCRIPT5:访问被拒绝

javascript - 有效地将多个标记添加到矢量图层

css - openlayers 鼠标位置问题与 css 变换 :scale()

javascript - Ajax 调用无法从 Web api 服务获取返回消息

javascript - 数组如何在 JS 函数中更新和返回

javascript - 转换 2010-04-15 23 :59:59 to 15th Apr 2010