Клуб API Карт

2.0 yandex#satellite и maxZoom

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

Добрый день.

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

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

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

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

Александр
28 января 2016, 02:33

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

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

Александр
28 января 2016, 02:33

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

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

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

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

Александр
28 января 2016, 02:33

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

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

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

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

Александр
28 января 2016, 02:33

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

 

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

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

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

Александр
28 января 2016, 02:33

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

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

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