Метод locate в библиотеке Leaflet используется для
определения географического положения устройства через браузерный
Geolocation API и последующей работы с полученными координатами на
карте. Он принадлежит объекту карты и позволяет запускать процесс
определения местоположения с различными параметрами точности, поведения
карты и режима отслеживания.
Метод возвращает объект карты и инициирует асинхронный процесс, результат которого обрабатывается через события.
map.locate(options);
Параметр options представляет собой объект конфигурации,
влияющий на поведение геолокации и реакцию карты на результат.
Параметр setView определяет автоматическое центрирование
карты на найденной позиции пользователя.
map.locate({ setView: true });
При значении true карта автоматически перемещается к
координатам пользователя. Дополнительно может использоваться совместно с
параметром maxZoom.
Параметр maxZoom задаёт уровень масштабирования карты
после успешного определения местоположения.
map.locate({
setView: true,
maxZoom: 16
});
Используется для ограничения приближения карты при центрировании на позиции пользователя, что особенно полезно при отображении городского или регионального уровня детализации.
Параметр watch включает режим постоянного отслеживания
перемещения пользователя.
map.locate({ watch: true });
При активации карта будет получать обновления координат при изменении местоположения устройства. Это полезно для навигационных приложений и систем трекинга.
В режиме watch важно учитывать необходимость остановки
отслеживания через:
map.stopLocate();
Параметр timeout задаёт максимальное время ожидания
ответа от Geolocation API в миллисекундах.
map.locate({ timeout: 10000 });
Если за указанный период позиция не определена, генерируется событие
ошибки locationerror.
Параметр maximumAge определяет допустимость
использования кэшированных координат.
map.locate({ maximumAge: 60000 });
Значение указывается в миллисекундах. Если координаты были получены ранее указанного времени, они могут быть повторно использованы без нового запроса к GPS или сети.
Параметр enableHighAccuracy включает режим высокой
точности определения координат.
map.locate({ enableHighAccuracy: true });
При включении браузер пытается использовать GPS, Wi-Fi и другие источники для повышения точности, что увеличивает потребление ресурсов и может замедлить получение результата.
На практике параметры часто используются совместно для настройки поведения карты:
map.locate({
setView: true,
maxZoom: 15,
watch: true,
timeout: 8000,
maximumAge: 30000,
enableHighAccuracy: true
});
Такой вызов включает непрерывное отслеживание с высокой точностью, ограничением времени ожидания и автоматическим центрированием карты.
Работа метода locate основана на событиях, которые
позволяют обрабатывать результат асинхронно.
Событие возникает при успешном определении координат.
map.on('locationfound', function (e) {
console.log(e.latlng);
console.log(e.accuracy);
});
Объект события содержит:
latlng — координаты пользователяaccuracy — радиус точности в метрахbounds — предполагаемые границы областиСобытие возникает при ошибке определения местоположения.
map.on('locationerror', function (e) {
console.log(e.message);
});
Содержит сообщение об ошибке и код причины, например отказ пользователя в доступе к геолокации или таймаут.
{
latlng: LatLng,
accuracy: Number,
altitude: Number | null,
altitudeAccuracy: Number | null,
heading: Number | null,
speed: Number | null,
timestamp: Number
}
Некоторые поля доступны только при поддержке соответствующих датчиков устройством.
При включённом режиме watch: true геолокация продолжает
обновляться до явного прекращения.
map.stopLocate();
Метод завершает поток обновлений и освобождает ресурсы браузера.
Геолокация зависит от реализации браузера и разрешений пользователя. Основные особенности:
enableHighAccuracy может различатьсяМетод тесно связан с объектом карты и влияет на её состояние:
setViewmaxZoomПример визуализации позиции:
map.on('locationfound', function (e) {
L.marker(e.latlng).addTo(map);
L.circle(e.latlng, e.accuracy).addTo(map);
});
Режим watch создаёт постоянный поток обновлений
координат. Это влияет на:
locationfoundЧасто применяется фильтрация обновлений по минимальному изменению координат или времени.
map.locate({
setView: true,
maxZoom: 14
});
Используется для первоначального центрирования карты.
map.locate({
watch: true,
enableHighAccuracy: true
});
Применяется для отслеживания перемещения пользователя.
map.locate({
timeout: 5000,
maximumAge: 120000
});
Используется для ускоренного получения приблизительной позиции.
Типичные причины возникновения locationerror:
timeout)map.on('locationerror', function (e) {
if (e.code === 1) {
console.log('Доступ запрещён');
}
});
Результаты locate часто используются для динамического
добавления слоёв:
Обновление слоёв при каждом событии позволяет синхронизировать карту с перемещением устройства.
Если браузер не поддерживает геолокацию, событие
locationerror срабатывает немедленно. В этом случае объект
map не получает координаты, а выполнение логики, завязанной
на locationfound, не происходит.