Отображение большого количества полигонов через ObjectManager в Яндекс картах

Есть задача отображения большого количества полигонов, до ~ 5 000 - 7 000 на вьюпорт.

В настоящий момент это реализовано через создание инстанса ObjectManager.

При изменении bounding box карты (изменение координат центра, изменение зума) - происходит получение массива данных с бэкенда, удаление предыдущего массива из ObjectManager (методы removeAll или remove), и повторное добавление данных в ObjectManager (метод add). Это необходимо, поскольку полигон с теми же координатами (или id) между запросами может менять свое отображение (заливка цветом например).

На кол-ве полигонов >= 3000 начинаются заметные проблемы с перформансом, даже на мощных машинах. В частности, очень заметна длительная работа метода ObjectManager.removeAll.

Другой подход (с загрузкой сразу всего объема доступных данных) применить не можем - объем большой, а проблемы с перформансом проявляются примерно такие же.

  1. Есть ли оптимальный способ решения подобной задачи с отображением тысяч полигонов на карте? При условии, что получать данные мы хотим чанками. Чанк = то, что помещается во вьюпорт.

  2. Можно ли использовать какой-то другой способ удаления объектов из ObjectManager, который будет работать быстрее? (пробовали удаление самого менеджера из maps.geoObjects, создание нового инстанса со свежим набором данных - появляются проблемы другого рода)

Заранее спасибо!


Ответы (1 шт):

Автор решения: YaCor'

ObjectManager не подходит для такого объёма работ. Вам следует попробовать более производительные решения - LoadingObjectManager, RemoteObjectManager или даже Слой активных областей.

→ Ссылка