Home
Accesso / Registrazione
 di 

Geolocation: come conoscere la tua posizione

La geolocalizzazione

Con il termine Geolocation si definisce il processo attraverso il quale è possibile determinare la posizione geografica relativa ad un utente connesso a Internet basandosi sulla sola informazione fornita dal suo indirizzo IP.

La conoscenza della posizione geografica è un fattore molto importante, dal momento che, utilizzando tale informazione, un sito web potrebbe fornire ulteriori informazioni importanti all'utente (come ad esempio una lista degli hotel e dei ristoranti disponibili in quell'area, potrebbe fornire degli annunci o pubblicità mirate per quell'area, oppure mappe o altre informazioni relative al traffico e alle condizioni climatiche di quella zona), e, soprattutto, è molto utile e di aiuto quando utilizzata su dispositivi mobili come portatili, smartphone, o palmari.

Gli indirizzi IP vengono assegnati agli utenti Internet dai provider dei serivizi e sono assegnati in tutto il mondo basandosi su una suddivisione per aree geografiche: sfruttando tale informazione, la posizione fisica può essere agevolmente associata a ciascun indirizzo IP (in un modo del tutto simile a quanto avviene con i numeri di telefono). Per poter eseguire questa operazione, è necessario avere un database con le associazioni tra indirizzo IP e posizione geografica; sul web esistono diverse società che rendono disponibile questo tipo di servizio, sia in modo gratuito che a pagamento.

Una di queste società è la Maxmind, tramite la sua tecnologia chiamata GeoIP (www.maxmind.com/app/ip-location). Visitando un sito web sul quale è disponibile GeoIP, è infatti possibile ottenere delle informazioni dettagliate relative alla posizione dell'utente, quali ad esempio: paese, regione, città, codice postale, codice di area (USA e altri paesi dove applicabile), latitudine, longitudine, velocità di connessione, Internet Service Provider (ISP), ecc.. MaxMind fornisce le API per la geolocation sia per Linux che per Windows, e per diversi linguaggi di programmazione, come ad esempio C, C#, Java, Pascal, Perl, PHP, Python, Ruby, e così via.

GeoIP Javascript Web Service

A questo punto possiamo cominciare a vedere il codice Javascript messo a disposizione da MaxMind a QUESTO indirizzo:

<script language="JavaScript" src="http://j.maxmind.com/app/geoip.js"></script>
<br>Country Code:
<script language="JavaScript">document.write(geoip_country_code());</script>
<br>Country Name:
<script language="JavaScript">document.write(geoip_country_name());</script>
<br>City:
<script language="JavaScript">document.write(geoip_city());</script>
<br>Region:
<script language="JavaScript">document.write(geoip_region());
</script><br>Region Name:
<script language="JavaScript">document.write(geoip_region_name());
</script><br>Latitude:
<script language="JavaScript">document.write(geoip_latitude());
</script><br>Longitude:
<script language="JavaScript">document.write(geoip_longitude());</script>
<br>Postal Code:
<script language="JavaScript">document.write(geoip_postal_code());</script>

Potete copiare questo script in una pagina html e provare a caricarla con il vostro browser preferito: sarete così in grado di visualizzare una serie di informazioni relative alla vostra posizione geografica. E' tutto molto semplice, non vi sembra? GeoIP JavaScript è un servizio offerto da MaxMind per ottenere le informazioni del paese, regione, città, latitudine, e longitudine corrispondenti alla posizione del visitatore di un sito web. Si basa su Javascript, è molto semplice da programmare, e funziona sia su pagine web statiche che dinamiche. E' persino possibile produrre un output grafico tramite l'applicazione Google Maps (visitate questo sito: http://code.google.com/intl/it-IT/apis/maps), ottenendo una mappa centrata rispetto alle coordinate (latitudine e longitudine) ottenute dall'esecuzione dello script MaxMind. Occorre a questo punto notare come la tecnica di geo-location basata sull'IP non sempre fornisca l'esatta posizione geografica: una certa approssimazione è sempre presente a seconda della reale posizione del provider; inoltre, se si utilizzano delle connessioni di rete locali (cioè in pratica una VPN) si potrebbe ottenere un'informazione non veritiera.

W3C geolocation API

Supporto per la geolocation viene fornito anche dal W3C per mezzo di un set specifico di API (le relative specifiche sono disponibili a QUESTO indirizzo. Non tutti i browser Internet le supportano, tuttavia, ma Firefox (a partire dalla versione 3.5) è uno di quelli che forniscono supporto. Potete controllare le coordinate (latitudine e longitudine) corrispondenti alla posizione fornita dal vostro indirizzo IP eseguendo lo scritto mostrato nel seguito. Occorre anche notare come, al fine di proteggere la vostra privacy, il browser vi chiederà il permesso prima di richiedere le coordinate della vostra posizione (voi potrete, ovviamente, accettare o meno di farlo):

<script type="text/javascript">
<!--
function getPosition()
{
  if (!navigator.geolocation)
  {
    alert('Unfortunately, your browser does not support Geo Services');
  }
  else
  {
    navigator.geolocation.getCurrentPosition(displayCoordinates);
    return false;
  }
}
function displayCoordinates(curPos)
{
  var Latitude  = curPos.coords.latitude;
  var Longitude = curPos.coords.longitude;
  alert('Your current coordinates are: Lat='+Latitude+',Longitude='+Longitude);
  return false;
}
//-->
</script>
<body onload="getPosition()"></body>

Ottenere una mappa con Google Maps

Possiamo a questo punto mettere tutto quanto assieme e, conoscendo la posizione geografica corrente (espressa dalla coppia di valori latitudine e longitudine), saremo in grado di visualizzare la mappa corrispondente a questa posizione. Ciò è reso possibile dal servizio offerto da Google Maps, ed occorre che voi vi siate preventivamente registrati per esso in modo tale da ottenere una chiave per utilizzo a fini non commerciali (dovrete inserire la vostra chiave al posto della parola "InsertHereYourKey" nello script). Lo script seguente parte mostrando una mappa pre-fissata centrata sull'Italia (potete ovviamente cambiare i valori di lat e lon nello script per visualizzare un'altra area di vostro interesse); successivamente, se l'utente acconsente a farlo, vengono mostrate le coordinate della posizione corrente in una dialog box. Infine, viene mostrata la mappa corrispondente a quest'ultima posizione geografica:

<script src="http://maps.google.com/maps?file=api&amp;v=2&amp;sensor=true&amp;key=InsertHereYourKey" type="text/javascript"></script>
<script type="text/javascript">
<!--
var yourMap;
function initialize()
{
  if (GBrowserIsCompatible())
  {
    yourMap = new GMap2(document.getElementById("mapStyle"));
    yourMap.setCenter(new GLatLng(41.54, 12.29), 5);
    yourMap.setUIToDefault();
  }
}
function getPosition()
{
  initialize();
  if (!navigator.geolocation)
  {
    alert('Unfortunately, your browser does not support Geo Services');
  }
  else
  {
    navigator.geolocation.getCurrentPosition(displayCoordinates);
    return false;
  }
}
function displayCoordinates(curPos)
{
  var Latitude  = curPos.coords.latitude;
  var Longitude = curPos.coords.longitude;
  alert('Your current coordinates are: Lat='+Latitude+',Lon='+Longitude);
  var yourPoint = new GLatLng(Latitude, Longitude);
  yourMap.setCenter(yourPoint, 15);
  var yourCurrPoint = new GMarker(yourPoint);
  youMap.addOverlay(yourCurrPoint);
  return false;
}
//-->
</script>
<body onload="getPosition()" onunload="GUnload()"></body>
<div id="mapStyle" style="width: 600px; height: 400px"></div>

Le due immagini seguenti mostrano l'output dello script precedente, assumendo che l'utente Internet si trovi nell'area di Firenze:

 

 

Scrivi un commento all'articolo esprimendo la tua opinione sul tema, chiedendo eventuali spiegazioni e/o approfondimenti e contribuendo allo sviluppo dell'argomento proposto. Verranno accettati solo commenti a tema con l'argomento dell'articolo stesso. Commenti NON a tema dovranno essere necessariamente inseriti nel Forum creando un "nuovo argomento di discussione". Per commentare devi accedere al Blog
ritratto di Antonello

Suona un po' come il Grande

Suona un po' come il Grande Fratello (nel senso americano del termine) ma è una tecnologia di grandissima utilità.
Ottimo articolo!

ritratto di Boris L.

Esagerato... :) Comunque sì,

Esagerato... :)

Comunque sì, davvero un gran bell'articolo! Complimenti.

ritratto di Boris L.

Una domanda soltanto: la

Una domanda soltanto: la precisione? E poi, il metodo è sempre attendibile?
E se si è dietro un proxy? Cambia qualcosa?

ritratto di slovati

Anzitutto grazie per i

Anzitutto grazie per i quesiti da te proposti. Cercherò di rispondere andando per ordine:
1. la precisione dipende strettamente dalla "qualità" del database utilizzato da MaxMind. L'accuratezza di questo database viene costantemente verificata e aggiornata basandosi su dati reali (abbinamenti tra indirizzi IP di utenti reali e relativa località geografica). Le indicazioni riportate sul loro sito (http://www.maxmind.com/en/city_accuracy) sono abbastanza chiare: la precisione dipende dalla zona geografica e l'errore può anche essere sensibile in alcune aree.
2. utilizzando un proxy si può certamente ingannare la procedura di geo-localizzazione. Chi utilizza internet per scopi fraudolenti usa in genere questa tecnica (basata sull'uso di open proxy o anonymous proxy) con cui si ottiene lo "spoofing" dell'indirizzo IP. MaxMind offre al proposito un servizio (http://www.maxmind.com/en/ccv_overview) per rilevare se una transazione proveniente da un determinato indirizzo IP è affidabile o a rischio.

ritratto di Antonello

bene… Credo che la curiosità

bene… Credo che la curiosità sia stata soddisfatta… :)
grazie per la spiegazione, in realtà la domanda era venuta in mente anche a me :D

ritratto di Giorgio B.

Ottimo articolo. Molto

Ottimo articolo.
Molto interessante.

 

 

Login   
 Twitter Facebook LinkedIn Youtube Google RSS

Chi è online

Ci sono attualmente 21 utenti e 55 visitatori collegati.

Ultimi Commenti