Задать вопрос
kovalenkovpu
@kovalenkovpu
JS-dev

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

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

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

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

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

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

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

2. Можно ли использовать какой-то другой способ удаления объектов из ObjectManager, который будет работать быстрее? (пробовали удаление самого менеджера из maps.geoObjects, создание нового инстанса со свежим набором данных - появляются проблемы другого рода)
  • Вопрос задан
  • 171 просмотр
Подписаться 3 Средний 2 комментария
Пригласить эксперта
Ответы на вопрос 1
freeExec
@freeExec
Участник OpenStreetMap
Нет таких вундеркиндов, способных умозреть 7 тысяч полигонов разом. В лучшем случае он будет видеть сплошную заливку. Вот её и показывайте, объединив всё это в несколько полигонов, визуально похожих на исходные.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы