Геолокация: показ местоположения пользователя или устройства на картах

Обзор

В этом руководстве показано, как отобразить географическое местоположение устройства на карте Google, используя функцию геолокации HTML5 вашего браузера вместе с API JavaScript Карт. Географическое местоположение будет отображаться только в том случае, если пользователь разрешил совместное использование местоположения.

Когда пользователь запускает запрос геолокации, он получит запрос от браузера о согласии на доступ к данным о местоположении устройства. Если запрос не выполнен, это может быть связано с тем, что в разрешениях на определение местоположения было отказано или устройство не смогло определить свое местоположение. Эта функция доступна только в безопасном контексте (HTTPS) в некоторых или во всех поддерживающих браузерах.

Ниже представлена ​​карта, по которой можно определить текущее местоположение устройства пользователя.

В приведенном ниже примере показан весь код, необходимый для создания этой карты.

Машинопись

// Note: This example requires that you consent to location sharing when // prompted by your browser. If you see the error "The Geolocation service // failed.", it means you probably did not give permission for the browser to // locate you. let map: google.maps.Map, infoWindow: google.maps.InfoWindow;  function initMap(): void {   map = new google.maps.Map(document.getElementById("map") as HTMLElement, {     center: { lat: -34.397, lng: 150.644 },     zoom: 6,   });   infoWindow = new google.maps.InfoWindow();    const locationButton = document.createElement("button");    locationButton.textContent = "Pan to Current Location";   locationButton.classList.add("custom-map-control-button");    map.controls[google.maps.ControlPosition.TOP_CENTER].push(locationButton);    locationButton.addEventListener("click", () => {     // Try HTML5 geolocation.     if (navigator.geolocation) {       navigator.geolocation.getCurrentPosition(         (position: GeolocationPosition) => {           const pos = {             lat: position.coords.latitude,             lng: position.coords.longitude,           };            infoWindow.setPosition(pos);           infoWindow.setContent("Location found.");           infoWindow.open(map);           map.setCenter(pos);         },         () => {           handleLocationError(true, infoWindow, map.getCenter()!);         }       );     } else {       // Browser doesn't support Geolocation       handleLocationError(false, infoWindow, map.getCenter()!);     }   }); }  function handleLocationError(   browserHasGeolocation: boolean,   infoWindow: google.maps.InfoWindow,   pos: google.maps.LatLng ) {   infoWindow.setPosition(pos);   infoWindow.setContent(     browserHasGeolocation       ? "Error: The Geolocation service failed."       : "Error: Your browser doesn't support geolocation."   );   infoWindow.open(map); }  declare global {   interface Window {     initMap: () => void;   } } window.initMap = initMap;

JavaScript

// Note: This example requires that you consent to location sharing when // prompted by your browser. If you see the error "The Geolocation service // failed.", it means you probably did not give permission for the browser to // locate you. let map, infoWindow;  function initMap() {   map = new google.maps.Map(document.getElementById("map"), {     center: { lat: -34.397, lng: 150.644 },     zoom: 6,   });   infoWindow = new google.maps.InfoWindow();    const locationButton = document.createElement("button");    locationButton.textContent = "Pan to Current Location";   locationButton.classList.add("custom-map-control-button");   map.controls[google.maps.ControlPosition.TOP_CENTER].push(locationButton);   locationButton.addEventListener("click", () => {     // Try HTML5 geolocation.     if (navigator.geolocation) {       navigator.geolocation.getCurrentPosition(         (position) => {           const pos = {             lat: position.coords.latitude,             lng: position.coords.longitude,           };            infoWindow.setPosition(pos);           infoWindow.setContent("Location found.");           infoWindow.open(map);           map.setCenter(pos);         },         () => {           handleLocationError(true, infoWindow, map.getCenter());         },       );     } else {       // Browser doesn't support Geolocation       handleLocationError(false, infoWindow, map.getCenter());     }   }); }  function handleLocationError(browserHasGeolocation, infoWindow, pos) {   infoWindow.setPosition(pos);   infoWindow.setContent(     browserHasGeolocation       ? "Error: The Geolocation service failed."       : "Error: Your browser doesn't support geolocation.",   );   infoWindow.open(map); }  window.initMap = initMap;
Посмотреть пример

Попробуйте образец

Что такое геолокация?

Геолокация — это определение географического местоположения вычислительного устройства с использованием различных механизмов сбора данных. Обычно большинство служб геолокации используют адреса сетевой маршрутизации или внутренние чипы GPS для определения этого местоположения. Геолокация — это API для конкретного устройства. Это означает, что браузеры или устройства должны поддерживать геолокацию, чтобы использовать ее через веб-приложения.

Стандарт геолокации W3C

Приложения, которые хотят выполнять геолокацию, должны поддерживать стандарт W3C Geolocation . Обратите внимание, что приведенный выше пример кода определяет местоположение устройства через API W3C navigator.geolocation .

Иногда веб-сайты используют IP-адреса для определения местоположения устройства, однако это может дать лишь приблизительную оценку этого местоположения. API-интерфейсы стандарта W3C являются наиболее полно поддерживаемыми и наиболее точными, поэтому им следует отдавать приоритет перед другими методами геолокации.