Le Geolocation API sono una specifica del W3C (l’editor è Andrei Popescu, Google Inc, del team di Google Gears) e definiscono le API per accedere alle informazioni di localizzazione attraverso il browser.
Innanzitutto, il punto di riferimento è ovviamente la specifica del W3C: http://www.w3.org/TR/geolocation-API/ (l’editor appartiene al team di Google Gears).
Quali browser supportano le Geolocation API?
Desktop: Firefox 3.5, Opera 10, Chrome (tramite Gears “nativo”), IE 7.0+ (richiede Gears)
Mobile: Safari Mobile, Opera Mobile (richiede Gears), IE Mobile (richiede Gears) e Android Browser (tramite Gears)
Come si usano?
Il funzionamento è molto semplice, e le API vengono sono accessibili tramite Javascript.
Una doverosa premessa: la localizzazione è a carico dello UA, e non c’e’ garanzia di una risposta.
Come si ottiene la posizione attuale del device?
Tramite Javascript lo sviluppatore chiede allo User Agent la posizione attuale: a questo punto o si ottiene un risultato (asincrono) o un errore (se ad esempio le geolocation API non sono supportate). Entrambi i casi vengono gestiti tramite callback.
void getCurrentPosition(in PositionCallback successCallback, [Optional] in PositionErrorCallback errorCallback, [Optional] in PositionOptions options);
Una possibile implementazione è la seguente:
navigator.geolocation.getCurrentPosition(
function(position) {
var location = [position.address.city, position.address.region, position.address.country].join(', ');
document.getElementById('gotcha').innerHTML = position.latitude + "," + position.longitude, location);
},
function() {
document.getElementById('cantfindyou').innerHTML = "Crap, I don't know. Good hiding!";
}
);
In caso di successo si ottiene un oggetto Position definito in questo modo:
interface Position {
readonly attribute Coordinates coords;
readonly attribute DOMTimeStamp timestamp;
};
interface Coordinates {
readonly attribute double latitude;
readonly attribute double longitude;
readonly attribute double altitude;
readonly attribute double accuracy;
readonly attribute double altitudeAccuracy;
readonly attribute double heading;
readonly attribute double speed;
};
Il mio device ha il GPS. Come posso richiedere che venga utilizzato per la localizzazione?
Le API permettono di impostare alcuni filtri, utilizzando le PositionOptions
interface PositionOptions {
attribute boolean enableHighAccuracy;
attribute long timeout;
attribute long maximumAge;
};
Il parametro enableHighAccuracy è proprio quello che serve per specificare che si sta richiedendo una localizzazione ottenuta con la migliore tecnologia disponibile. Impostare questo parametro a true può allungare il tempo necessario a ottenere una risposta.
Il parametro timeout consente di definire l’intervallo massimo di tempo entro cui lo User Agent deve rispondere alla richiesta. Nel caso in cui sia stato impossibile soddisfare la richiesta, verrà invocata la errorCallback, che riceverà un PositionError di tipo TIMEOUT.
Lo User Agent molto probabilmente mantiene una cache. Il parametro maximumAge va utilizzato se si vuole definire la massima età dei dati ricevuti.
Posso richiedere il tracking della posizione?
Si. E’ possibile richiedere un aggiornamento continuo della posizione tramite il metodo watchPosition().
long watchPosition(in PositionCallback successCallback, [Optional] in PositionErrorCallback errorCallback, [Optional] in PositionOptions options);
Il funzionamento è analogo al caso di una richiesta "one time". L'unica differenza è che le callback verranno richiamate ogni volta che lo User Agent ritiene che ci sia un cambiamento di posizione.
Come disabilito il tracking?
Il tracking va disabilitato tramite il metodo:
void clearWatch(in int watchId);
Cosa mi consigli di leggere su questo argomento?
- La specifica: http://www.w3.org/TR/geolocation-API/
- Questo articolo su Ajaxian: navigator.geolocation: Using the W3C Geolocation API today
E’ tutto!

![[del.icio.us]](http://www.nogood.it/wp/wp-content/plugins/bookmarkify/delicious.png)
![[Facebook]](http://www.nogood.it/wp/wp-content/plugins/bookmarkify/facebook.png)
![[Google]](http://www.nogood.it/wp/wp-content/plugins/bookmarkify/google.png)
![[Ma.gnolia]](http://www.nogood.it/wp/wp-content/plugins/bookmarkify/magnolia.png)
![[MySpace]](http://www.nogood.it/wp/wp-content/plugins/bookmarkify/myspace.png)
![[Reddit]](http://www.nogood.it/wp/wp-content/plugins/bookmarkify/reddit.png)
![[StumbleUpon]](http://www.nogood.it/wp/wp-content/plugins/bookmarkify/stumbleupon.png)
![[Technorati]](http://www.nogood.it/wp/wp-content/plugins/bookmarkify/technorati.png)
![[Windows Live]](http://www.nogood.it/wp/wp-content/plugins/bookmarkify/windowslive.png)
![[Yahoo!]](http://www.nogood.it/wp/wp-content/plugins/bookmarkify/yahoo.png)
![[Email]](http://www.nogood.it/wp/wp-content/plugins/bookmarkify/email.png)
Ultimi Commenti