javascript - 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);
解决方案
通过使用数组替换源中的所有功能,.clear()
并且.addFeatures()
应该更有效。