Отображение большого количества полигонов через ObjectManager в Яндекс картах
Есть задача отображения большого количества полигонов, до ~ 5 000 - 7 000 на вьюпорт.
В настоящий момент это реализовано через создание инстанса ObjectManager.
При изменении bounding box карты (изменение координат центра, изменение зума) - происходит получение массива данных с бэкенда, удаление предыдущего массива из ObjectManager (методы removeAll или remove), и повторное добавление данных в ObjectManager (метод add). Это необходимо, поскольку полигон с теми же координатами (или id) между запросами может менять свое отображение (заливка цветом например).
На кол-ве полигонов >= 3000 начинаются заметные проблемы с перформансом, даже на мощных машинах. В частности, очень заметна длительная работа метода ObjectManager.removeAll.
Другой подход (с загрузкой сразу всего объема доступных данных) применить не можем - объем большой, а проблемы с перформансом проявляются примерно такие же.
Есть ли оптимальный способ решения подобной задачи с отображением тысяч полигонов на карте? При условии, что получать данные мы хотим чанками. Чанк = то, что помещается во вьюпорт.
Можно ли использовать какой-то другой способ удаления объектов из
ObjectManager, который будет работать быстрее? (пробовали удаление самого менеджера изmaps.geoObjects, создание нового инстанса со свежим набором данных - появляются проблемы другого рода)
Заранее спасибо!
Ответы (1 шт):
ObjectManager не подходит для такого объёма работ. Вам следует попробовать более производительные решения - LoadingObjectManager, RemoteObjectManager или даже Слой активных областей.