Navigazione geolocalizzata: dall’IP alla tua posizione e non solo!
La geolocalizzazione è una funzionalità interessante utilizzata ampiamente nella realizzazione di landing page ed oggetto di un’importante e recente rivisitazione del W3C con la proposta di una specifica API Geolocation API Specification.
Possiamo inquadrare la geolocalizzazione secondo tre livelli a cui corrispondono specifiche soluzioni tecnologiche e relative qualità dei risultati (in termini di precisione della localizzazione o accuratezza):
livello 1) mapping indirizzo IP range – ISP;
livello 2) mapping indirizzo IP range – ISP subnet;
livello 3) mapping IP/punti di accesso wireless – zona geografica.
Ogni ISP (Interner Service Provider) che fornisce la connettività ad Internet ha una serie di indirizzi IP (IP range) dedicati che può assegnare ai suoi clienti, tale range di IP può venire suddiviso in altri sottogruppi di indirizzi (subnet) ognuno dei quali servirà, per esempio, una determinata regione o provincia.
I servizi del primo livello si basano sull’interrogazione di un database che include la mappa di assegnazione dei blocchi di indirizzi IP ad ogni ISP sul globo. Tutte le subnet allocate ad un ISP sono associate ad una stessa zona geografica di riferimento dell’ISP. Poichè un ISP potrebbe servire più regioni nell’ambito della stessa Country, la localizzazione a livello di regione (o provincia) potrebbe non essere precisa. I servizi di questo livello offrono una granularità a livello ISP.
I servizi del secondo livello, oltre alle mappe di assegnazione degli IP range agli ISP, utilizzano ulteriori dati provenienti da varie fonti. Questi dati, elaborati con specifici algoritmi, offrono una maggiore accuratezza nella localizzazione. Questi servizi offrono una localizzazione con una granularità a livello di subnet. In altre parole essi potrebbero potenzialmente discriminare le subnet di un medesimo ISP per zona geografica. Generalmente questi servizi offrono risultati molto buoni su specifiche Country (p.e. US, Canada) con un’accuratezza a livello di città che può arrivare al 99.8%. Tale precisione – comunque – può ridursi significativamente su altre zone del globo.
Ecco un elenco di servizi: Geobytes IP Locator (tool online e API, gratuito fino ad dato numero di richieste giornaliere), Maxmind Geolocation Technology (tool online, API e DB scaricabile, versione gratuita e commerciale quest’ultima offre una maggiore accuratezza su US e Canada rispetto alla versione free), IPinfoDB (tool online, API e DB scaricabile tutto completamente gratuito), IP2Location (tool online free, API e DB nella versione commerciale). Alcuni di questi servizi aggiungono alla localizzazione geografica, ulteriori informazioni come ZIP ed Area code (generalmente solo per specifiche Country), Longitudine/Latitudine, Timezone, Weather location code (usati dai principali servizi meteorologici come AOL Weather, The Weather Channel – weather.com, Yahoo! Weather), ecc.
Altri tool riconducibili al primo livello, ma molto pratici per un controllo veloce online, sono: My Ip Addess e Whois By Ip Address. Particolarmente interessante è anche il tool VisualRoute che include i tre programmi software chiave di Internet “ping,” “whois” e “traceroute”, in un unico tool veloce ed integrato; VisualRoute analizza in modo automatico i problemi di connettività e visualizza i risultati in un formato grafico.
I suddetti tool, sebbene con diversi livelli di accuratezza, sono in grado di localizzare in modo del tutto approssimativo un indirizzo IP. Solo l’ISP che assegna gli indirizzi IP è in grado di effettuare una localizzazione precisa.
I servizi di localizzazione del terzo livello possono offrire un’accuratezza molto alta (fino a pochi metri) combinando informazioni derivanti dall’IP con altre tipologie di dati (come le informazioni sui punti di accesso wireless nelle vicinanze).
I browser più evoluti, allineati con la Geolocation API specification del W3C, offrono un supporto nativo a primitive Javascript in grado di recuperare informazioni di localizzazione. Firefox 3.6, per esempio, fornisce questo supporto. In particolare, quando un utente visita un sito che utilizza la navigazione geolocalizzata, Firefox raccoglie informazioni su punti di accesso wireless nelle vicinanze e sull’indirizzo IP del computer, successivamente (previa conferma dell’utente), Firefox trasmette questi dati ad un fornitore di servizi di geolocalizzazione (Google Location Services) che provvede a produrre una stima della posizione. Firefox, quindi, comunica la stima della posizione (longitudine e latitudine) al sito Web che ne ha fatto richiesta. Ulteriori informazioni sono disponibili su Firefox Geolocation.
Attualmente, non tutti i browser implementano la specifica Geolocation API del W3c. In questi casi, in attesa delle future evoluzioni, è possibile installare degli addon (o plugin) come Google Gears o la Google Toolbar in grado di estendere le funzionalità del browser anche con questo supporto. Segue una tabella riassuntiva:
| Web Browser | Geolocation API support |
|---|---|
| Mozilla Firefox | supportato da Firefox 3.5 e versioni successive |
| Chrome | supportato mediante Google Gears Geolocation API |
| Opera | supportato in versione speciale – download from this page |
| Safari | supportato mediante Google Gears Geolocation API |
| Internet Explorer | supportato mediante Google Gears Geolocation API o mediante Google Toolbar |
Considerando che Google Gears è disponibile su Windows, Windows Mobile (IE Mobile, Opera Mobile), Mac (Firefox, Safari), Linux e Android è evidente come uno sviluppo in grado di usare questo framework potrebbe risultare consigliabile per garantire la portabilità delle propri implementazioni.
Per verificare se il tuo browser supporta nativamente la Geolocation clicca qui: HTML 5 GeoLocation Demo
Per concludere, propongo un utile esempio di geolocalizzazione basato su un uso combinato di Geolocation API nativa e Google Gears (a seconda del supporto fornito dal browser). L’esempio visualizza la posizione su una Google Map (è necessario richiedere l’API Key all’indirizzo Google Maps API).
A seconda della zona in cui ci si trova, l’accuratezza della localizzazione potrebbe essere anche dell’ordine della decina di metri (granularità molto fine).
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<head>
<title>Geolocation su Firefox, Chrome, Safari e IE</title>
</head>
<body>
<h2 id="status"> Attivazione Geolocation ...</h2>
<script type="text/javascript" src="http://code.google.com/apis/gears/gears_init.js"></script>
<script type="text/javascript">
function findUserLocation()
{
var mygeo = null;
if (navigator.geolocation){ // supporto nativo?
mygeo = navigator.geolocation;
}else{ // nessun supporto nativo uso google gears
mygeo = google.gears.factory.create('beta.geolocation');
}
if(mygeo){ // supporto geolocation presente
mygeo.getCurrentPosition(foundUserLocation, noLocationFound);
}else{ // nessun supporto per geolocation
alert("Il Browser non è compatibile");
}
}
function foundUserLocation(position)
{
var lat = position.coords.latitude;
var lang = position.coords.longitude;
document.getElementById('status').innerHTML = "Geolocation presente, genero la mappa...";
var location = lat + "," + lang;
var mapsrc = "http://maps.google.com/staticmap?center="+ location + "&markers=" + location + "" +",reda" + "&zoom=14&size=512x512&maptype=roadmap&sensor=false&key=QUI LA TUA GOOGLE MAPS API KEY";
var imgtag = document.createElement('img');
imgtag.src = mapsrc;
document.body.appendChild(imgtag);
}
function noLocationFound()
{
alert('Impossibile trovare la zona geografica');
}
findUserLocation();
</script>
</body>
</html>
