при использовании clusterSource в openlayers (5/6) я могу красиво кластеризовать объекты.
За исключением vectorsource, который является источником моего кластерного источника, данные постоянно меняются. У меня есть веб-розетки, которые снабжают меня информацией о местонахождении вещей (например, корабли в Маринетрафи c или самолеты на Flightradar24). У меня было ощущение, что с каждым изменением основного источника моя кластеризация выполняется повсеместно. Есть ли способ отправить это обновление по телефону? или вызвать его вручную?
Я могу буферизовать входной поток и обрабатывать большее количество сообщений одновременно (например, 1000 обновлений позиции каждые 3 секунды). И я хочу, чтобы кластеризация происходила ПОСЛЕ того, как я обработал эти 1000 сообщений. Теперь он становится настолько медленным, что я чувствую, что это происходит при каждом сообщении (так, 1000 раз каждые 3 секунды)
Другая оптимальная опция - кластеризация только тех элементов, которые в данный момент видны (с буфером по краям сторона расстояния кластера) Это, по моему мнению, сэкономило бы много вычислений.
Кто-нибудь здесь может мне помочь?
прямо сейчас я получил что-то вроде этого (в мета-коде):
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);