Клуб API Карт

Обработчик события загрузки всех меток на карте

Пост в архиве.
Алексей
6 ноября 2013, 23:17

Есть карта, в одном из городов на ней около 1000 меток. При перемещении карты на этот город происходит JSON запрос на сервер, в ответ получаем данные меток. Размещаем все 1000 меток на карте, пробегая циклом по массиву и добавляя все метки в кластеризатор. Затем добавляем кластеризатор на карту.

Для чего это нужно. Мы используем две коллекции, и заносим в них метки. Если в коллекции №1 есть метки, мы заносим новые метки в коллекцию №2, размещаем на карте, после чего удалям все из коллекции №1. Следующий запрос JSON поместит метки в коллекцию №2 и удалит все из №1 и т.д. Таким образом при перемещении по карте сначала подгружаются новые данные, затем стиратся устаревшие.

Сейчас используем таймер, кторый стирает устаревшие данные через 2 секунды, но это не правильно.

Как отследить, что на карте размещены все метки, которые были получены через JSON, чтобы потом удалить ненужные объекты? На загрузку и обработку всех меток кластеризатором уходит примерно 1,5-2 сек.

3 комментария

1,5-2 сек. (вы что-то делаете не так)

Для начала - посмотрите как работает кластеризатор. А он работает квадратно-гнездовым методом, те по сетке.

Так что и данные запрашивайте не просто так, а тоже по некой сетке.

При подгрузки новых данных _смержите_ поступившие маркеры, с теми что были_. Те найдите среди новых данных на самом деле новые данные.

Добавьте их в кластер. Так как запрос был по сетке - в кластере должны заполниться новые квадратики, а в старых изменений быть не должно. 

Не удаляйте старые данные из кластера - он сам следит за их видимостью на экране.

Когда закончите - сделайте запросы по типу https://github.com/theKashey/tileLoader, добавьте кеша немного, и никаких 1.5-2 сек у вас более не будет.

Хм, т.е. схема, когда данные запрашиваются исходя из координат центра не совсем верна? Я получаю координаты центра, округляю их до целых  (например 55 и 37 для Москвы) и запрашиваю все метки из базы в диапазоне:
от 54,5 до 55,5 
 и 36,5 до 37,5

Получается большой массив данных. Пользователь перемещается по карте, все работает плавно и гладко. Как только центр карты изменился, например 55 изменилось на 56 - скрипт получает с сервера все метки в диапазоне:
от 55,5 до 56,5 
 и 36,5 до 37,5 

И вот в этот момент мы грузим новые метки на карту, старые удаляем.
Смысл такой: пользователь должен перемещаться по карте Москвы и не наблюдать исчезновение/появление маркеров при обновлении данных. Еще есть особенность, что под картой должны быть указаны все метки города, а не только те, которые видны на карте в данный момент.

Я понимаю, что мы идем свои путем и изобретаем велосипед, но может уже есть какой-нибудь пример, кторый поможет нам понять "как правильно сделать"?

p.s. Спасибо за ответ! 

уже 100 раз обсуждалось — способ загрузки выбранной Вами далеко не самый лучший, т.к. Вы загружаете одни и теже метки каждый раз и отсутствует кеширование