У меня много функций (тысячи), и некоторые из них (~ сотни) меняют положение / направление / состояние. Поэтому я попытался обновить слой / карту двумя способами, как показано ниже:
Я обновляю с помощью setCoordinates: (данные поступают через socket.io)
feature.getGeometry () .setCoordinates (ol.proj.transform ([data.longitude, data.latitude], 'EPSG: 4326', 'EPSG: 3857'));
Я создал глобальный массив которые включают в себя все функции, и я установил интервал (5 se c) и очистить источник вектора и снова добавить объекты из глобального массива. Кстати, я обновляю глобальный массив, как показано ниже:
// data: это обновленная функция здесь. (позиция, направление и пользовательское состояние были изменены).
var index = globalFeaturesArray.findIndex (feature => feature.getId () == data.getId ()); globalFeaturesArray [index] = data; // установлены новые функции в глобальном массиве
Проблема заключается в том, что если обновленных функций слишком много, браузер зависает при их поиске в глобальном массиве и замене. Наряду с заменой, новые обновления могут приходить снова и снова (узкое место). Так же бывает и с первым. Он также пересчитывает кластер для каждого обновления функций.
Каков наилучший способ отображения объектов на карте открытых слоев, если они постоянно получают обновления? Я читаю темы о геосервере и WFS, но я не уверен, что это подходит для моей ситуации? Функция 100x может изменить положение, в то время как функция 900x стоит, поэтому сервер wfs будет отправлять мне функцию 1k снова и снова? Это может произойти огромный и бесполезный трафик c между геосервером и клиентами?
Надеюсь, есть лучший способ решить эту проблему в режиме реального времени!