Клуб API Карт

Тормоза при большом количестве объектов на карте

Пост в архиве.

При нанесении нескольких тысяч (~4-5) объектов (GeoObject типа Point) начинаются жуткие тормоза при скроллинге и масштабировании карты. В зависимости от различных условий, реально мне нужно выводить от 1 до 1 000 000 объектов. Кто-нибудь решал подобную задачу? Поделитесь опытом, пожалуйста, как оптимизировать производительность?

12 комментариев

так вроде бы кластеризация помогает в этом. В сообществе частенько подобный вопросы всплывает.

Посмотрите видео с CodeFest или с DUMP. Там  как раз рассказывает о размещении множества объектов на карте. Доклады разные.

миллион обьектов не то что показать нельзя - загрузить на клиент не получится.

4-5 тысяч обьектов таже НЕ МОГУТ поместиться одновременно в видимой области на карте ( а получиться "весь покрытый метками" )

Подумайте над кластеризатором и над тем что наверное не видимые(или на которые не реально кликнуть) в данный момент обьекты как-то и не нужны

 

 

миллион обьектов не то что показать нельзя - загрузить на клиент не получится.

А хотспоты?

Отрендерить на тайлах можно любое кол-во точек и так же по-тайлово грузить геометрию

в хотспоте не может быть больше 100 меток.

Иначе выполняется пункт необходимости пикселхантинга что потребудется для клика на одну из меток.

почему именно 100?

размер тайла 256 на 256.

размер стандартной иконки 37 на 42.  7 на 6 иконок. 42 иконки без пересечений.

Чуток их уменьшим.. 100 - предел..

 

при таких кол-вах точек нет смысла использовать стандартные иконки, обычно делают облако точек как при поиске организаций на maps.yandex.ru.

К тому же самое главное (о чем нужно тут упомянуть) - то что в сравнении с тем же кластеризатором и использованием канваса, вообще никаких данных грузить не надо (кроме дополнительного img-слоя), а все загрузка идет по-тайлово и только при наведении курсора на конкретный тайл

это особенность технической реализации, а в голове надо держать  интерфейсы.

Думаю топик-стартера интересует как раз реализации а не интерфейсы.

И особенность реализации хотспотов в том что они позволяют отобразить тысячи и даже миллионы объектов на карте, причем без каких-либо издержек в плане производительности (все летает). Управлять кешированием данных по-тайлово (минимальные издержки на обновление данных)

Другие варианты имеют минусы:

1. кластеризатор

- необходимо переслать весь массив объектов на клиент за раз.

- тормоза при перестраивании кластеров при драге карты

2. Канвас

- так же много пересылаем пусть и не все за раз

- непосредственно при отрисовке большого кол-ва меток на канвасе броузер "виснет" на пару сек.

 

это все накладывает некие ограничение на конечную картинку.

А играться надо именно с ней.

Многим людям например активные области ну никак не подходят, чисто визуально например.

картинка будет такой какую ты сам отрендеришь на тайлах.

Ограничения как я понимаю будут ввиде невозможности драгать такие хотспотные геообъекты.