Клуб API Карт

Кэш и тайлы

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

Добрый день.

Постараюсь описать проблему: имеется "картиночный" слой поверх карты на котором куча меток. Раз в час все тайлы пересчитываются исходя из изменений в БД. (удаляются все файлы для всех уровней увеличения и создаются заново). Иногда необходимо оперативно добавить новую метку(и) на слой и я их без проблем добавляю, но... пока не нажму в браузере "Ctrl-r" данные не обновляются. Точнее на некоторых уровнях зума метка появляется, а на других нет. Вероятнее всего дело в кэше, но как заставить карту обновить кэш ? Изменение даты создания/изменения фалов почему-то не помогает.

8 комментариев
Sergey Konstantinov
28 января 2016, 02:12

Обычно в таких случаях в URL тайла дописывается версия данных или таймстэмп последнего обновления. Посмотрите на пробки на Яндекс.Картах, к примеру.

Всмысле при инициализации ? Типо было:

map.layers.add(new ymaps.Layer('/Layer/%z/tile-%x-%y.png', {tileTransparent: true}));

стало:

map.layers.add(new ymaps.Layer('/Layer/%z/tile-%x-%y.png?date=01-01-01', {tileTransparent: true}));

Я правильно понял ?

Да, ещё дело в том, что делается это всё аяксом. т.е. перерисовки карты нет, а соответственно надо как-то грохнуть слой и создать заново с новым таймстампом. Да ?

Sergey Konstantinov
28 января 2016, 02:12

Достаточно вызвать методы setTileUrlTemplate и update

http://api.yandex.ru/maps/doc/jsapi/2.x/ref/reference/Layer.xml#setTileUrlTemplate

Вот это по-ходу то, что надо!

А можно пример использования, если не затруднит ?

что-то типа:

layer.setTileUrlTemplate ('/Layer/%z/tile-%x-%y.png?date=01-01-01'); ?

layer.update(); ?

Sergey Konstantinov
28 января 2016, 02:12

ага.

Спасибо большое. Второй раз меня уже спасаешь :-)

А просто layer.update(); не достаточно будет ?

недостаточно.

т.к. кеширует не АПИ, а броузер

Всё отлично! Работает!

Спасибо большое