Функция, подобная приведенной ниже, возвращает координаты местоположения пользователя в объекте {lat, lng}:
function getCurrentLocation() {
return new Promise((resolve, reject) => {
if (!navigator.geolocation) reject(new Error('Get User Location error'));
else {
return Promise.resolve(
navigator.geolocation.getCurrentPosition(position => {
let currentCoordinates = {
lat: position.coords.latitude,
lng: position.coords.longitude,
};
resolve(currentCoordinates);
}),
);
}
});
}
Функция вызывает функцию браузера navigator.geolocation.getCurrentPosition()
, которая возвращает координаты пользователяесли он включен. Функция является асинхронной (т. Е. Ее запуск займет некоторое время, и вашему коду придется ждать завершения операции), поэтому ее следует вызывать следующим образом (обратите внимание на ключевые слова async
и await
):
function async callingFunction() {
let userLocationCoords = await getCurrentLocation()
let userLocationMarker = new google.maps.Marker({
position: userLocationCoords,
map: map,
});
...
}
Это приводит к тому, что код «ждет», пока функция getCurrenLocation () завершит работу, прежде чем двигаться дальше.
Обратите внимание, что это не будет работать, если соединение http, а не https (по крайней мере, в Chrome)), но он должен работать в вашем Codepen, который является https. Кроме того, пользователю будет предложено разрешить веб-сайту доступ к их местоположению, которое он должен принять, чтобы функция работала.
Получив координаты пользователя, вы можете добавить маркер на карту с помощьюиспользуя new google.maps.Marker()
и предоставляя ему координаты {lat, lng} маркера и объекта карты, к которому вы хотите добавить его, в соответствии с кодом выше.