В контексте MapLibre GL JS текущая позиция рассматривается в двух взаимосвязанных измерениях: состояние карты (camera state) и географическое положение устройства пользователя (geolocation). Оба аспекта определяют, какая область карты отображается и как она изменяется во времени.
Камера карты в MapLibre GL JS описывает то, что пользователь видит в данный момент. Основные параметры текущей позиции камеры включают:
Эти параметры формируют полное описание текущего состояния отображения.
Центр карты представляет собой координаты в формате
[долгота, широта]:
const center = map.getCenter();
console.log(center.lng, center.lat);
Метод getCenter() возвращает объект LngLat,
отражающий текущую географическую точку, находящуюся в центре
экрана.
Масштаб определяет уровень детализации карты:
const zoom = map.getZoom();
console.log(zoom);
Значение zoom изменяется непрерывно и влияет на плотность отображаемых объектов.
MapLibre GL JS поддерживает 3D-ориентацию карты:
const bearing = map.getBearing();
const pitch = map.getPitch();
Эти параметры важны при работе с навигационными и визуализационными сценариями.
Для определения текущей области карты используется объект границ:
const bounds = map.getBounds();
Метод возвращает координаты юго-западного и северо-восточного углов:
bounds.getSouthWest()bounds.getNorthEast()Границы позволяют вычислять, какие данные должны быть загружены или отображены в текущем окне.
Текущая позиция камеры может изменяться программно или интерактивно.
map.setCenter([37.6173, 55.7558]);
map.flyTo({
center: [37.6173, 55.7558],
zoom: 10,
speed: 1.2
});
Метод flyTo изменяет текущую позицию камеры с анимацией,
что особенно важно для навигационных интерфейсов.
MapLibre GL JS предоставляет события, позволяющие реагировать на изменение состояния карты:
map.on('move', () => {
const center = map.getCenter();
const zoom = map.getZoom();
});
Событие move срабатывает при любом изменении камеры:
панорамировании, зуме, вращении или наклоне.
Для более точного контроля используются дополнительные события:
moveend — завершение перемещенияzoom — изменение масштабаrotate — изменение угла поворотаpitch — изменение наклонаПомимо состояния карты, текущая позиция может означать физическое местоположение устройства. В веб-приложениях это реализуется через API браузера:
navigator.geolocation.getCurrentPosition((position) => {
const lng = position.coords.longitude;
const lat = position.coords.latitude;
});
Этот источник данных не зависит от MapLibre GL JS, но часто используется совместно с картой.
Для синхронизации позиции устройства с картой применяется центрирование камеры:
navigator.geolocation.getCurrentPosition((position) => {
map.setCenter([
position.coords.longitude,
position.coords.latitude
]);
});
Также возможно отслеживание перемещения в реальном времени:
navigator.geolocation.watchPosition((position) => {
map.setCenter([
position.coords.longitude,
position.coords.latitude
]);
});
MapLibre GL JS включает встроенный элемент управления для работы с геолокацией:
const geolocate = new maplibregl.GeolocateControl({
positionOptions: {
enableHighAccuracy: true
},
trackUserLocation: true
});
map.addControl(geolocate);
Функциональность контроллера:
В сложных приложениях текущая позиция карты и устройства объединяются в единую модель состояния. Это позволяет:
Пример комбинированного подхода:
let userPosition = null;
navigator.geolocation.watchPosition((position) => {
userPosition = [
position.coords.longitude,
position.coords.latitude
];
map.easeTo({
center: userPosition
});
});
Текущая позиция в MapLibre GL JS не является единственным значением, а представляет собой совокупность параметров:
Изменение любого из этих параметров приводит к изменению визуального представления карты, что делает понятие текущей позиции динамическим состоянием, а не фиксированной точкой.