В контексте MapLibre GL JS параметр pitch определяет наклон карты относительно горизонтальной плоскости. Он задаёт угол наклона камеры, позволяя переходить от классического «плоского» вида сверху к перспективной 3D-проекции, где объекты приобретают глубину и визуальную высоту.
Pitch измеряется в градусах и обычно находится в диапазоне от 0 до 85.
При увеличении pitch меняется восприятие геометрии: линии дорог, здания и рельеф начинают отображаться с перспективным искажением.
MapLibre GL JS использует камеру как абстракцию наблюдателя в 3D-пространстве. Камера определяется тремя основными параметрами:
Pitch управляет вращением камеры вокруг оси X в системе координат карты. При этом центр карты остаётся фиксированной точкой, вокруг которой происходит наклон.
С математической точки зрения pitch влияет на матрицу проекции, изменяя преобразование из координат мира (longitude/latitude) в экранные координаты.
Pitch задаётся через параметры карты при инициализации:
const map = new maplibregl.Map({
container: 'map',
style: 'https://demotiles.maplibre.org/style.json',
center: [37.6173, 55.7558],
zoom: 12,
pitch: 45
});
В этом случае карта сразу загружается с наклоном 45°.
Если параметр не указан, используется значение по умолчанию — 0°.
Основной метод управления наклоном:
map.setPitch(60);
Метод принимает угол в градусах и мгновенно изменяет положение камеры.
Также поддерживается анимация:
map.setPitch(60, {
duration: 2000,
easing: (t) => t * (2 - t)
});
При анимации происходит плавное интерполирование угла pitch с текущего значения до целевого.
Получение текущего значения:
const currentPitch = map.getPitch();
Возвращает число в градусах, отражающее текущее состояние камеры.
MapLibre GL JS позволяет ограничивать максимальный наклон:
map.setMaxPitch(70);
Это используется для предотвращения чрезмерного наклона, который может привести к визуальной деградации или неудобству восприятия.
Pitch может изменяться через пользовательские жесты:
Эти взаимодействия контролируются параметрами:
map.dragRotate.enable();
map.touchZoomRotate.enable();
При включённом вращении камеры pitch становится частью интерактивного управления перспективой.
Pitch часто используется в комбинации с анимациями камеры для создания переходов между режимами просмотра.
map.flyTo({
center: [37.6173, 55.7558],
zoom: 14,
pitch: 65,
bearing: -20,
speed: 1.2
});
В этом случае pitch становится частью общей анимации камеры, где одновременно изменяются несколько параметров.
Внутренне MapLibre использует интерполяцию значений, чтобы обеспечить плавность перехода без резких скачков перспективы.
Pitch напрямую влияет на визуализацию следующих типов слоёв:
Наиболее выраженный эффект pitch наблюдается при использовании 3D-экструзии зданий:
{
"id": "buildings",
"type": "fill-extrusion",
"paint": {
"fill-extrusion-height": ["get", "height"],
"fill-extrusion-base": 0,
"fill-extrusion-opacity": 0.8
}
}
При увеличении pitch здания приобретают объём и читаемую высоту.
Иконки и текст при сильном наклоне могут изменять поведение:
Линии дорог и маршрутов при наклоне визуально расходятся в перспективе, создавая эффект глубины. Это особенно заметно при высоком zoom.
Увеличение pitch незначительно влияет на производительность само по себе, однако косвенно может повышать нагрузку:
На слабых устройствах высокие значения pitch в сочетании с большим количеством 3D-слоёв могут снижать FPS.
Pitch имеет ряд системных ограничений:
Также pitch тесно связан с fog, terrain и другими параметрами визуализации, влияющими на восприятие глубины.
При использовании рельефа (terrain) pitch становится ключевым параметром визуализации:
Комбинация terrain + pitch формирует полноценную псевдо-3D сцену, где карта перестаёт быть плоской поверхностью.
Pitch редко используется изолированно. Наиболее типичные комбинации:
Увеличение zoom при высоком pitch усиливает эффект глубины:
Комбинация наклона и поворота позволяет формировать произвольные углы обзора, близкие к свободной камере.
map.setBearing(30);
map.setPitch(50);
Pitch применяется для изменения восприятия карты в зависимости от сценария:
Изменение pitch часто связано с переключением режимов интерфейса.
MapLibre предоставляет события для отслеживания изменений камеры:
map.on('pitch', () => {
console.log(map.getPitch());
});
Также доступны более общие события:
moverotatezoomPitch обычно обрабатывается в рамках move, так как
изменение наклона считается частью трансформации камеры.
Внутри WebGL-рендеринга pitch влияет на матрицу вида (view matrix). Наклон реализуется через вращение вокруг оси X:
Это обеспечивает согласованное отображение всех слоёв в единой 3D-сцене.
При высоких значениях pitch возникают характерные особенности:
Эти эффекты не являются ошибками, а следствием перспективной проекции камеры.