Клуб API Карт

Вывод множества объектов на карту

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

Есть задача - вывод на карту объектов по определенной выборке. Объектов пара тысяч. Карта серьезно тормозит, даже с кластерами. Вариант с активными областями не подходит - нагенерить тайлы на все варианты выборки точно не получится. В связи с этим возникло пара вопросов:

 

1) Есть еще какое-либо решение?

2) Поможет ли вариант с асинхронной подгрузкой из yml файлов по тайлам. Если да, то как её реализовать?

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

а что именно тормозит? добавление объектов на карту? или действия с картой после?

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

У вас есть несколько стадий

1. загрузка данных

2. их парсинг

3. созадание из них геообъектов

4. отрисовка этих геообъектов на карте

 

Если у вас тормозят пункты 1-3, то нужно грузить данные по тайлам. Вы должны следить за изменением видимой области карты, высчитывать, какие области показались, а какие скрылись, и догружать недостающие данные.

А каким образом это делается есть в документации или в примерах?

Примеров на это у нас пока, к сожалению, нет. А реализация довольно сложная - какие-то простые рекомендации давать смысла наверное нет.

Может зайти с другой стороны - просто грузить все ваши объекты порциями, например по 100?

Тоже вариант. Если бы указали на пример, был бы вам благодарен. Я так понмаю ждем загрузки карты, запрашиваем yml с 100 объектами, ждем пока они отобразятся, потом следующие запришиваем?

Целого примера у нас на это нет. А какой именно момент вызывает затруднение?

Если мой алгоритм верен:

1) Ждем загрузки карты.

2) Запрашиваем yml с 100 объектами через ymaps.geoXml.load

3) Добавляем эти объекты на карту.

4) Загружаем следующий yml.

Вопросы такие: по п.1 какой эвент подразумевает полную загрузку карты(то есть чтобы вся карта отобразилась, а потом пошла бы загрузка). Выполнение п.4 не надо повесить на какой-нибудь эвент, подтверждающий что предыдущие 100 записей уже добавились?

Спасибо большое за помощь!


Необязательно ждать загрузки карты, запросы к yml-файлу все равно будут асинхронными, пока придет первый ответ, карта как раз прорисуется.

Выполнение п.4 можно поставить сразу после п.3. Та же логика - пока идет запрос за новой партией, объекты из предыдущей партии отрисовываются.

 

Только надо учесть - если суммарное количество объектов, отображаемое в итоге на карте, превысит 150-200 объектов, карта будет тормозить.

То есть такая схема вас спасет только при использовании кластеризатора для показа меток.

Большое спасибо! Попробую.