Geolocation API HTML5

Geolocation API HTML5

La Geolocation API consente alle pagine web di ottenere la posizione geografica dell'utente, previo consenso esplicito. È fondamentale per app di mappe, ricerca locale, servizi di consegna, meteo. La precisione varia da GPS preciso (smartphone outdoor) a IP-based approssimativo (desktop). Vediamo come usarla in modo corretto rispettando privacy e best practice di permessi.

Cos'è Geolocation API

L'API espone navigator.geolocation con tre metodi principali: getCurrentPosition (lettura singola), watchPosition (monitoraggio continuo) e clearWatch (interruzione monitoraggio). Ogni chiamata richiede il consenso dell'utente, gestito dal browser tramite popup. L'oggetto Position ritornato contiene latitude, longitude, accuracy in metri, altitude, speed, heading. Il livello di precisione dipende dalla sorgente disponibile sul dispositivo.

HTTPS obbligatorio

Da Chrome 50+ e Firefox 55+, Geolocation API funziona solo su contesti sicuri (HTTPS o localhost). Su HTTP la richiesta fallisce silenziosamente. Questa restrizione è motivata dalla sensibilità della posizione utente, dato personale ad alto rischio se intercettato. Assicurati sempre che il tuo sito serva la pagina via HTTPS prima di richiedere geolocalizzazione, per garantire funzionamento e sicurezza dei dati.

Permissions API

L'API Permissions permette di interrogare lo stato dei permessi prima di richiederli, evitando popup ripetuti. navigator.permissions.query({name: 'geolocation'}).then(result => { console.log(result.state) }) restituisce 'granted', 'denied' o 'prompt'. In base allo stato puoi nascondere il pulsante "Trova posizione" se denied, mostrare istruzioni per riabilitare il permesso, o procedere direttamente se già granted. UX più fluida che richiede meno interazioni utente per arrivare al risultato finale del flusso di geolocalizzazione.

Privacy e best practice

La geolocalizzazione è uno dei dati più sensibili che un sito può richiedere. GDPR richiede consenso esplicito informato. Best practice: spiega in anticipo perché serve la posizione (cookie banner extra, modal informativa prima della prompt browser), offri sempre un'alternativa manuale (input indirizzo), non chiedere appena la pagina si apre ma in risposta a un'azione utente esplicita (click "Trova negozi vicini"), salva i risultati lato client se possibile senza inviarli al server, documenta uso e ritenzione nella privacy policy del sito. Per audit GDPR, mantieni log delle richieste di posizione (anonimizzato), policy di retention, e flusso di consenso conforme alle normative europee. Considera anche compliance LGPD (Brasile), CCPA (California) per siti con audience globale.

La geolocalizzazione è uno dei dati più sensibili che un sito può richiedere. GDPR richiede consenso esplicito informato. Best practice: spiega in anticipo perché serve la posizione (cookie banner extra, modal informativa prima della prompt browser), offri sempre un'alternativa manuale (input indirizzo), non chiedere appena la pagina si apre ma in risposta a un'azione utente esplicita (click "Trova negozi vicini"), salva i risultati lato client se possibile senza inviarli al server, documenta uso e ritenzione nella privacy policy del sito.

Reverse geocoding

La Geolocation API restituisce coordinate (lat, lng), non un'indirizzo. Per ottenere città, via, regione devi fare reverse geocoding tramite un servizio: Google Maps Geocoding API, OpenStreetMap Nominatim (gratuito ma con rate limit), Mapbox, Here Maps. Pattern: getCurrentPosition() -> fetch al servizio passando lat/lng -> ottieni stringa indirizzo. Cache i risultati per ridurre chiamate API. Per privacy, considera reverse geocoding solo se necessario per il flusso utente. Per "trova negozi vicini" basta calcolare distanza tra coordinate, senza convertire mai in indirizzo testuale per privacy ottimizzata.

watchPosition per tracking

watchPosition restituisce un'ID che monitora continuamente la posizione, chiamando il callback ad ogni cambiamento significativo. Use case: app di navigazione, tracking di fitness/running, location-based ads. Consuma molta batteria su mobile (GPS sempre attivo se enableHighAccuracy=true). Best practice: usalo solo quando l'app è in foreground e l'utente sta esplicitamente usando feature di location, fermalo con clearWatch quando non serve più. Per attività periodiche, getCurrentPosition() ogni N minuti consuma meno batteria di watchPosition continuo. Bilancia accuracy vs consumo energetico in base al use case specifico.

Servizi geocoding

Geocoding (indirizzo a coordinate) e reverse geocoding (coordinate a indirizzo) sono operazioni separate dalla Geolocation API. Servizi disponibili: Google Maps Geocoding API (alta qualità ma a pagamento dopo quota gratuita), Mapbox Geocoding (alternativa popolare), OpenStreetMap Nominatim (gratuito ma rate-limited), Here Maps, OpenCage. Per uso enterprise considera SLA, accuracy, copertura geografica, prezzo. Cache aggressiva dei risultati per ridurre costi. Per UE, considera implications GDPR: alcuni servizi USA potrebbero non essere conformi senza Standard Contractual Clauses. Implementazione tipica: client invia coordinate al tuo backend, backend chiama provider geocoding, cache risultato in Redis con TTL.

Procedura passo-passo

  1. Verifica supporto: if ('geolocation' in navigator).
  2. Richiedi posizione: navigator.geolocation.getCurrentPosition(success, error, options).
  3. In success accedi a pos.coords.latitude e pos.coords.longitude.
  4. In error gestisci PERMISSION_DENIED, POSITION_UNAVAILABLE, TIMEOUT.
  5. Per monitoraggio continuo usa watchPosition con stessa firma.
  6. Imposta options: enableHighAccuracy, timeout, maximumAge.
  7. Per fermare watch: navigator.geolocation.clearWatch(watchId).

Errori comuni e come risolverli

  • HTTP context: l'API non funziona; deploya sempre su HTTPS.
  • Senza fallback: utenti che negano permesso non vedono nulla; offri input manuale dell'indirizzo.
  • Polling con getCurrentPosition: spreca batteria; usa watchPosition per aggiornamenti.
  • maximumAge troppo basso: forza GPS attivo costantemente; aumenta per balance accuracy/battery.
  • Privacy non comunicata: spiega all'utente perché serve la posizione prima di chiedere il permesso.

Domande frequenti

D: La posizione è sempre precisa?
R: No, varia. GPS outdoor: 3-10m. Indoor wifi: 20-50m. IP-based: km. accuracy in metri indica la precisione stimata.

D: Posso usarla senza HTTPS?
R: Solo su localhost per sviluppo. Produzione richiede HTTPS obbligatorio.

D: Quanto consuma la batteria?
R: enableHighAccuracy=true attiva GPS, alto consumo. Su mobile usa con moderazione.

D: Funziona offline?
R: La posizione GPS sì; geocoding e mappe richiedono connessione.

Hai bisogno di aiuto?

Se vuoi sviluppo web con il team di G Tech Group, scrivici tramite il modulo di contatto.

Hai trovato utile quest'articolo?