#leaflet
#листовка
Вопрос:
Моя карта занимает 100% экрана, и я показываю весь мир, когда пользователь загружает карту.
При первой загрузке я пытаюсь показать как можно больше мира, учитывая эти три условия:
- Нулевой меридиан на экваторе находится в центре экрана.
- Карта увеличена настолько, что область выше 90 градусов широты и ниже 90 градусов долготы не отображается.
- Карта увеличена настолько, что области слева и справа от карты не дублируются. В принципе, нет двух или более Аляски или России.
В настоящее время я использую .fitBounds([[-90, -180], [90, 180]]);
, но это соответствует только моим первым критериям. Каков наилучший подход к этому?
Ответ №1:
Используйте maxZoom
опцию карты вместе с вызовом getBoundsZoom
метода.
А именно, вы хотите рассчитать уровень масштабирования, при котором [-85.0511, -180], [85.0511, 180]]
охват прямоугольника покрывает больше, чем весь экран просмотра карты, затем установите для карты maxZoom
это значение.
Обратите внимание, что максимальные и минимальные широты равны /-85.0511, а не /-90; проекция карты по умолчанию Листовки (EPSG:3857, он ЖЕ web mercator) представляет собой цилиндрическую проекцию, которая простирается вертикально до бесконечности и не имеет представления полюсов.
Также обратите внимание, что выходные getBoundsZoom
данные зависят от значений параметра карты zoomSnap
и размера контейнера карты. Возможно, вам захочется пересчитать карту maxZoom
при каждом изменении ее размера.
tl; dr: map.setMaxZoom(map.getBoundsZoom([-85.0511, -180], [85.0511, 180]], true));
.