GeolocateControl представляет собой встроенный UI-контрол библиотеки Mapbox GL JS, предназначенный для определения текущего местоположения устройства через браузерный Geolocation API и отображения его на карте.
Контрол объединяет несколько функций:
navigator.geolocationКомпонент тесно интегрирован с системой источников данных (sources) и слоёв (layers) Mapbox GL JS, автоматически создавая и обновляя геопространственные объекты.
GeolocateControl создаётся как экземпляр и добавляется в объект карты
через метод addControl.
import mapboxgl from "mapbox-gl";
const map = new mapboxgl.Map({
container: "map",
style: "mapbox://styles/mapbox/streets-v12",
center: [0, 0],
zoom: 2
});
const geolocate = new mapboxgl.GeolocateControl({
positionOptions: {
enableHighAccuracy: true
},
trackUserLocation: true
});
map.addControl(geolocate);
После добавления контрол автоматически отображается в интерфейсе карты в виде кнопки.
Определяет настройки браузерного API геолокации.
positionOptions: {
enableHighAccuracy: true,
timeout: 6000,
maximumAge: 0
}
Ключевые параметры:
enableHighAccuracy — использование GPS и других
высокоточных источниковtimeout — максимальное время ожидания координатmaximumAge — допустимость кэшированных координатАктивирует режим постоянного отслеживания местоположения.
false — одноразовое определение координатtrue — непрерывное обновление позицииПри включении режима карта автоматически реагирует на перемещения пользователя.
Управляет отображением маркера текущего местоположения.
true — отображение синей точкиfalse — скрытие маркера при сохранении логики
геолокацииОтвечает за визуализацию погрешности определения координат.
Отображает направление движения устройства при наличии данных компаса.
DeviceOrientation APIНастройки поведения камеры при получении координат.
fitBoundsOptions: {
maxZoom: 16
}
Позволяет контролировать масштабирование карты при центрировании на пользователе.
Компонент генерирует несколько событий, интегрированных в event system карты.
Срабатывает при успешном получении координат.
geolocate.on("geolocate", (e) => {
const lng = e.coords.longitude;
const lat = e.coords.latitude;
});
Событие содержит объект GeolocationPosition,
включающий:
Вызывается при ошибках определения местоположения.
Типичные причины:
geolocate.on("error", (error) => {
console.log(error.message);
});
Срабатывает при выходе пользователя за пределы заданного
maxBounds карты.
Используется в сценариях ограниченной геозоны:
Программный запуск геолокации без нажатия на кнопку UI.
geolocate.trigger();
Используется для автоматического определения позиции при загрузке интерфейса.
Методы жизненного цикла, вызываемые системой карты:
Не используются напрямую в пользовательском коде.
GeolocateControl автоматически создаёт GeoJSON source:
{
type: "FeatureCollection",
features: [
{
type: "Feature",
geometry: {
type: "Point",
coordinates: [lng, lat]
},
properties: {
accuracy: accuracyValue
}
}
]
}
На основе этого источника формируются слои:
Стандартный режим:
Подходит для:
Активируется через trackUserLocation.
Особенности:
Используется в:
GeolocateControl напрямую управляет Camera API Mapbox GL
JS:
flyTo для плавного перемещенияeaseTo для мягкой анимацииfitBounds при учёте точностиЛогика центрирования зависит от параметров:
Ошибки геолокации классифицируются:
Пользователь запретил доступ к геоданным.
Устройство не может определить координаты.
Превышено время ожидания ответа GPS.
Каждый тип ошибки передаётся через событие error.
GeolocateControl зависит от браузерного API, что накладывает ограничения:
В условиях высокой частоты обновлений возможно:
Контрол добавляет кнопку в стандартную панель управления Mapbox GL JS.
Состояния кнопки:
Визуальные индикаторы синхронизируются с состоянием API.
При задании maxBounds карта реагирует на позицию
пользователя:
outofmaxboundsGeolocateControl взаимодействует с:
В сложных приложениях он часто используется совместно с: