В веб-картах на базе Mapbox GL JS координаты являются центральным
элементом взаимодействия с картой: каждая точка на экране может быть
преобразована в географическую систему координат и обратно. Основная
модель координат строится вокруг долготы и широты (longitude, latitude),
которые представлены в объекте LngLat.
Географическая модель в Mapbox GL JS основана на стандарте WGS84. Координаты задаются в формате:
Внутренние методы библиотеки оперируют объектами вида:
{
lng: 37.6173,
lat: 55.7558
}
или экземплярами mapboxgl.LngLat.
Карта хранит текущее состояние через центр, границы и масштаб:
map.getCenter() — текущий центр картыmap.getBounds() — видимые границыmap.getZoom() — уровень масштабаОдним из наиболее распространённых способов получения координат
является обработка события click.
Mapbox GL JS предоставляет объект события, содержащий поле
lngLat.
map.on('click', (e) => {
const coords = e.lngLat;
console.log(coords.lng, coords.lat);
});
Событие e.lngLat уже содержит преобразованные
географические координаты, соответствующие точке клика на карте. Это
избавляет от необходимости ручных вычислений проекций.
Дополнительно доступны экранные координаты:
map.on('click', (e) => {
console.log(e.point.x, e.point.y);
});
point представляет координаты в пикселях относительно
контейнера карты.
В случаях, когда координаты известны в пикселях (например, при
обработке движения мыши или кастомных слоёв), используется метод
unproject.
const geo = map.unproject([event.point.x, event.point.y]);
console.log(geo.lng, geo.lat);
Этот механизм выполняет обратное преобразование из координат WebMercator в географические значения.
Обратная операция выполняется через project:
const point = map.project({ lng: 37.6173, lat: 55.7558 });
console.log(point.x, point.y);
Такая трансформация используется при позиционировании HTML-элементов поверх карты или при синхронизации внешних интерфейсов с картографическим слоем.
Событие mousemove позволяет получать координаты в
реальном времени при перемещении указателя.
map.on('mousemove', (e) => {
const { lng, lat } = e.lngLat;
console.log(lng, lat);
});
Этот механизм часто применяется для отображения динамических координат в интерфейсе или для интерактивных инструментов анализа.
Текущая позиция карты определяется её центром. Это значение используется при сохранении состояния карты, синхронизации и восстановлении сессии.
const center = map.getCenter();
console.log(center.lng, center.lat);
Изменение центра происходит через setCenter:
map.setCenter([37.6173, 55.7558]);
Метод getBounds возвращает прямоугольную область,
ограничивающую текущий экран карты.
const bounds = map.getBounds();
console.log(bounds.getNorthEast());
console.log(bounds.getSouthWest());
Границы используются для пространственных запросов, фильтрации данных и загрузки тайлов.
Интеграция с геолокацией осуществляется через
GeolocateControl.
map.addControl(
new mapboxgl.GeolocateControl({
positionOptions: {
enableHighAccuracy: true
},
trackUserLocation: true
})
);
После активации контроль предоставляет координаты устройства в виде события:
map.on('geolocate', (e) => {
console.log(e.coords.longitude, e.coords.latitude);
});
Этот механизм опирается на Web Geolocation API, а результаты синхронизируются с системой координат карты.
Маркер (Marker) хранит собственное географическое
положение, которое может динамически изменяться.
const marker = new mapboxgl.Marker()
.setLngLat([37.6173, 55.7558])
.addTo(map);
const coords = marker.getLngLat();
console.log(coords.lng, coords.lat);
При перетаскивании маркера включается режим
draggable:
marker.setDraggable(true);
marker.on('dragend', () => {
const position = marker.getLngLat();
console.log(position);
});
При создании кастомных слоёв через custom layer или
WebGL-рендеринг координаты преобразуются в матрицы проекций. Внутри
render-функции доступен объект карты, позволяющий получать проекционные
данные.
const center = map.getCenter();
const mercator = mapboxgl.MercatorCoordinate.fromLngLat(center);
MercatorCoordinate используется для низкоуровневого
позиционирования объектов в 3D-пространстве.
Координаты в системе WebMercator подвержены искажениям на высоких широтах. Поэтому при вычислениях важно учитывать:
При работе с большими наборами данных применяется предварительная нормализация координат или использование серверной геометрической обработки.
Координаты в Mapbox GL JS часто поступают как поток событий:
clickmousemovedragtouchmovecontextmenuКаждое событие содержит:
lngLat — географические координатыpoint — экранные координатыoriginalEvent — исходное DOM-событиеmap.on('contextmenu', (e) => {
const { lng, lat } = e.lngLat;
const { x, y } = e.point;
console.log(lng, lat, x, y);
});
При интеграции с аналитическими сервисами координаты часто нормализуются:
function normalize(lngLat) {
return {
longitude: Number(lngLat.lng.toFixed(6)),
latitude: Number(lngLat.lat.toFixed(6))
};
}
Это позволяет уменьшить объём данных и унифицировать формат хранения.
Также часто используется обратное преобразование из строк:
const coords = "37.6173,55.7558".split(',').map(Number);
map.setCenter(coords);
Для фиксации взаимодействия внутри заданной зоны применяется
setMaxBounds:
map.setMaxBounds([
[36.0, 54.0],
[38.0, 56.0]
]);
Это ограничивает перемещение камеры указанным прямоугольником.
Работа с координатами в Mapbox GL JS строится на связке событийной
модели, математической проекции WebMercator и унифицированных объектов
LngLat, обеспечивающих согласованное преобразование между
экранным и географическим пространством.