Каков наилучший способ обновить положение и направления функций в openlayers на клиентах? - PullRequest
1 голос
/ 10 января 2020

У меня много функций (тысячи), и некоторые из них (~ сотни) меняют положение / направление / состояние. Поэтому я попытался обновить слой / карту двумя способами, как показано ниже:

  1. Я обновляю с помощью setCoordinates: (данные поступают через socket.io)

    feature.getGeometry () .setCoordinates (ol.proj.transform ([data.longitude, data.latitude], 'EPSG: 4326', 'EPSG: 3857'));

  2. Я создал глобальный массив которые включают в себя все функции, и я установил интервал (5 se c) и очистить источник вектора и снова добавить объекты из глобального массива. Кстати, я обновляю глобальный массив, как показано ниже:

    // data: это обновленная функция здесь. (позиция, направление и пользовательское состояние были изменены).

    var index = globalFeaturesArray.findIndex (feature => feature.getId () == data.getId ()); globalFeaturesArray [index] = data; // установлены новые функции в глобальном массиве

Проблема заключается в том, что если обновленных функций слишком много, браузер зависает при их поиске в глобальном массиве и замене. Наряду с заменой, новые обновления могут приходить снова и снова (узкое место). Так же бывает и с первым. Он также пересчитывает кластер для каждого обновления функций.

Каков наилучший способ отображения объектов на карте открытых слоев, если они постоянно получают обновления? Я читаю темы о геосервере и WFS, но я не уверен, что это подходит для моей ситуации? Функция 100x может изменить положение, в то время как функция 900x стоит, поэтому сервер wfs будет отправлять мне функцию 1k снова и снова? Это может произойти огромный и бесполезный трафик c между геосервером и клиентами?

Надеюсь, есть лучший способ решить эту проблему в режиме реального времени!

...