navigator.geolocation în JavaScript

Stocare și dispozitiv Toate browserele moderne (doar HTTPS)

Află locația utilizatorului (cu permisiunea lui): o singură dată sau urmărită continuu.

Sintaxă
navigator.geolocation.getCurrentPosition(succes, eroare, optiuni)
const id = navigator.geolocation.watchPosition(succes, eroare, optiuni)
navigator.geolocation.clearWatch(id)

Ce face navigator.geolocation

getCurrentPosition cere poziția o singură dată. Browserul întreabă utilizatorul, apoi apelează funcția de succes cu un obiect care are coords.latitude, coords.longitude și coords.accuracy (în metri), sau funcția de eroare (permisiune refuzată, poziție indisponibilă, timp depășit).

watchPosition apelează funcția la fiecare schimbare a poziției (navigație, alergare) și returnează un id; clearWatch(id) oprește urmărirea. Opțiuni: enableHighAccuracy (GPS, mai lent și mai costisitor), timeout, maximumAge.

Parametri

Parametru Descriere
succes Primește poziția.
eroare Opțional. Primește o eroare cu code și message.
optiuni Opțional. enableHighAccuracy, timeout, maximumAge.

Ce returnează

watchPosition: un id. Celelalte: undefined.

Exemple

Exemplul 1: Cel mai apropiat magazin

Rezultat pentru un utilizator din Iași care a acceptat cererea.

navigator.geolocation.getCurrentPosition(
  (poz) => {
    const { latitude, longitude, accuracy } = poz.coords;
    console.log(latitude.toFixed(4), longitude.toFixed(4), `±${Math.round(accuracy)} m`);
  },
  (e) => console.log("eroare", e.code, e.message),
  { timeout: 10000 },
);

Rezultat în browser

47.1585 27.6014 ±35 m

Exemplul 2: Urmărire și oprire

const id = navigator.geolocation.watchPosition((poz) => console.log("viteză:", poz.coords.speed));
setTimeout(() => {
  navigator.geolocation.clearWatch(id);
  console.log("urmărire oprită");
}, 60000);

Rezultat în browser

viteză: 1.4
viteză: 1.6
urmărire oprită

Greșeli frecvente

  • Ceri locația imediat la încărcarea paginii. Mulți utilizatori refuză o cerere fără context; cere-o după un clic pe „Găsește magazine în apropiere”.

Comenzi înrudite

  • Math.hypot: Calculează rădăcina pătrată a sumei pătratelor: ipotenuza sau distanța dintre două puncte.
  • Notification: Afișează notificări ale sistemului de operare, după ce utilizatorul a dat permisiunea.
  • async / await: Scrie cod asincron care se citește ca un cod obișnuit, de sus în jos.