Параметр bearing в MapLibre GL JS определяет угол поворота карты относительно северного направления. Он задаёт ориентацию сцены вокруг вертикальной оси и позволяет изменять направление «севера» на экране, создавая эффект вращения карты.
=
Значение bearing измеряется в градусах, где:
В MapLibre GL JS угол увеличивается по часовой стрелке.
При создании экземпляра карты можно задать начальный угол поворота
через параметр bearing.
const map = new maplibregl.Map({
container: 'map',
style: 'https://demotiles.maplibre.org/style.json',
center: [37.6173, 55.7558],
zoom: 10,
bearing: 30
});
Значение 30 означает, что карта будет повернута на 30°
по часовой стрелке от северного направления.
Поворот карты можно изменять динамически с помощью метода
setBearing.
map.setBearing(90);
Этот вызов мгновенно поворачивает карту так, что восток оказывается направлен вверх.
Для более плавного изменения используется easeTo:
map.easeTo({
bearing: 120,
duration: 2000
});
Параметр duration задаёт время анимации в
миллисекундах.
Текущее значение угла поворота можно получить через метод
getBearing.
const currentBearing = map.getBearing();
console.log(currentBearing);
Это значение полезно при реализации интерфейсов, завязанных на ориентацию карты, например компасов или синхронизации с другими сценами.
MapLibre GL JS позволяет ограничивать вращение карты через
maxBounds и параметры взаимодействия, но прямое ограничение
bearing обычно реализуется через обработку событий или программное
управление.
Пример ограничения угла:
map.on('rotate', () => {
const bearing = map.getBearing();
if (bearing > 60) {
map.setBearing(60);
}
if (bearing < -60) {
map.setBearing(-60);
}
});
Такой подход фиксирует карту в диапазоне ±60°.
По умолчанию MapLibre поддерживает вращение с помощью:
Отключение вращения:
const map = new maplibregl.Map({
container: 'map',
style: 'https://demotiles.maplibre.org/style.json',
interactive: true,
dragRotate: false,
touchZoomRotate: false
});
При отключении этих параметров карта становится фиксированной по направлению.
Параметр bearing часто комбинируется с center,
zoom и pitch для создания сложных анимаций
камеры.
map.flyTo({
center: [30.3351, 59.9343],
zoom: 12,
bearing: 180,
pitch: 45,
speed: 0.8
});
Такая конфигурация создаёт эффект пролёта с разворотом сцены.
При использовании наклона карты (pitch) значение bearing
приобретает дополнительную визуальную значимость, поскольку сцена
становится трёхмерной.
= (, )
Вместе они формируют направление взгляда камеры в пространстве.
Типичная задача — отображение компаса, который синхронизируется с картой.
map.on('rotate', () => {
const bearing = map.getBearing();
document.querySelector('.compass').style.transform =
`rotate(${bearing}deg)`;
});
Таким образом UI-компас всегда соответствует ориентации карты.
MapLibre предоставляет метод resetNorth, который
возвращает карту к северной ориентации.
map.resetNorth();
Для анимации:
map.resetNorth({ duration: 1000 });
Этот метод эквивалентен:
map.easeTo({ bearing: 0 });
1. Навигационные приложения Ориентация карты по направлению движения пользователя.
2. 3D визуализация городов Создание эффекта «облёта» объектов.
3. Аналитические панели Сравнение данных в разных ориентациях карты.
4. Игровые карты Изменение направления взгляда в зависимости от действий игрока.
В приложениях с GPS часто используется поворот карты в сторону движения:
navigator.geolocation.watchPosition((position) => {
const heading = position.coords.heading;
if (heading !== null) {
map.setBearing(heading);
}
});
Это создаёт эффект «карта поворачивается вместе с пользователем».
При работе с ограниченной областью (maxBounds) важно
учитывать, что вращение может визуально выходить за границы логики
приложения.
const map = new maplibregl.Map({
container: 'map',
style: 'style.json',
maxBounds: [
[30, 50],
[40, 60]
],
bearing: 45
});
Поворот карты влияет на рендеринг, особенно при:
Оптимизация достигается через:
raster тайлов вместо
vectorMapLibre генерирует событие rotate, которое вызывается
при изменении угла.
map.on('rotate', () => {
console.log(map.getBearing());
});
Также можно отслеживать завершение вращения:
map.on('rotateend', () => {
console.log('Rotation finished');
});
Если несколько карт должны иметь одинаковую ориентацию:
mapA.on('rotate', () => {
mapB.setBearing(mapA.getBearing());
});
Это полезно в аналитических интерфейсах и сравнительных визуализациях.
Изменение угла поворота влияет на визуальное восприятие:
Поэтому при проектировании интерфейсов часто фиксируют bearing в 0° или ограничивают его диапазон.
MapLibre поддерживает инерционное вращение, которое создаёт плавное
замедление после жеста пользователя. Это поведение зависит от параметров
dragRotate и встроенной физики карты.
(t) = _0 + _0^t () d
где:
Эта модель отражает динамическое изменение ориентации карты в процессе взаимодействия пользователя или анимации камеры.