Клуб API Карт

2.0 yandex#satellite и maxZoom

clgs
14 марта 2013, 09:37

Добрый день.

Подскажите пожалуйста, почему при ининциализации карты с типом yandex#map у казанием maxZoom, после пользовательского переключения в yandex#satellite, maxZoom увеличивает значение? И как этого избежать?

Получается так: загрузилась карта, переключил тип на "спутник", прокрутил зум, переключился на "схема" и "Для этого участка местности нет данных. Попробуйте перейти на масштаб выше или выбрать другое место на карте."

12 комментариев
Подписаться на комментарии к посту

используйте опцию checkZoomRange: true при переключении слоев

Ну это понятно, но возпрос же не в этом. А в том почему при переключении типа maxZoom увеличивается если он четко задан?

На моем стенде это не воспроизводится. Не могли бы вы привести код или дать ссылку на страницу?

Пример тут. В принцепе на любой карте это видно. Все они строются по одному алгоритму.

У вас maxZoom = 22. Зум на картах, насколько я поняла, за эти пределы не выходит - то есть опция работает корректно.

Теперь что касается переключения между типами карты - 

при переключении типа карты мы намеренно не переключаем зум до корректного - мало ли, может пользователь увидит, что тайлов нет, и захочет вернуться на тип карты, для которого тайлы есть. Изменение зума - это довольно внезапная операция в данном случае.

м... так, а почему при переключении типов карт, ползунок зума то увеличивается ("спутник"), то уменьшается ("схема")?

На примере первой карта: при "спутник" из исходного состояния до максимального увеличения зума три шага, а при "схема" один шаг.

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

Например, maxZoom=22, для схемы доступны зумы [0, 8], а для гибрида [0, 17]. Максимальный зум градусника будет меняться с 8 на 17 и обратно.

Теперь понятно. Как реализовать механизи, чтоб максимальный/минимальный зум был одинаков?

 

Для каждого типа карты диапазон доступных зумов может изменяться в зависимости от положения центра карты.

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

Либо можно слушать событие карты typechange и по этому событию выполнять операцию map.setZoom(map.getZoom(), {checkZoomRange: true}). В таком случае у карты останется либо ее текущий зум (если он корректный), либо карта зазумится до уровня, когда у нового типа карты есть тайлы.

Спасибо. Это я и хотел услышать. Жать только, что приходится делать костылём.

кажется что через событие и setZoom — вполне нормальное решение

да можно опцию замутить на самом деле