Клуб API Карт

YmapsML, кластеризация + обновляемые данные

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

Друзья подскажите пж, вывожу на карту объекты с помощью динамически сформированного из базы данных YmapsML файла(используя кластеризацию). Вопрос в следующем, у меня планируется выводить ~10000 меток которые будут периодически обновляться(т.е. какие-то удаляютсяся какие-то будут новые - порядка 500 за сутки) В данный момент все работает, но при добавлении в базу нового адреса на карте этот новый объект показывается НЕ СРАЗУ. Может как-то можно обновлять YmapsML или мне стоит использовать JSON.

Заранее Благодарю за ответы!

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

Ну это как вы спроектируете свое приложение. Рекомендую использовать ориентировочно такую схему:

1. Кешируете запрос на метки. (memcache вам очень поможет)

2. Пихаете в json, выдаёте на клиента.

3. Далее по таймеру/по событию на сервер шлёте ajax запрос на проверяете хеш кеша, не изменился ли он, если изменился вычисляем что изменилось, отдаём клиенту.

4. клиент дорисовывает/удаляет/перерисовывает метки которые вернул сервер.

 

тут скоре всего не о том речь.

скорее всего либо сервер, либо браузер кэширует файл с данными.

надо ссылку на данные сделать с рэндомным параметром.

типа 'http://mydomain.com/yml.xml?r='+(new Date(2009,1,14,2,31,30).valueOf())

10000 + YmapsML - это жестко. Посмотрите на размер YML-файла.

вот статейка годичной давности http://mapexpert.pro/?p=18

С тех пор яндекс maps API оптимизировался, но не на столько, чтобы показать все 10000.

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

Плюс оптимизация подкачиваемого файла с данными. Грузить каждый раз по полтора - два мегабайта бедному клиенту - нехорошо. Я для 10000 точек оптимизировал в 350кб.

Еще есть много моментов, поэтому я разрабатывал собственную либу с кластеризатором и канвасом. Про это можно прочитать в статье.

Спасибо за рекомендации, новые данные обновляются примерно через час - два.

Сделал уже через json(пока без кеша), потестирую далее посмотрим...