Geolocalizzazione nelle google map

Luca Bellenghi
RedTurtle’s blog
Published in
3 min readJul 12, 2016

--

Recentemente ho avuto la necessità di centrare una mappa google sulla posizione del client che la sta utilizzando. Ho dovuto quindi verificare le varie possibilità per ottenere le informazioni sulla geolocalizzazione dell’utente.

Ovviamente una possibilità sono le GeoLocation API di HTML5; di questa soluzione mi ha sempre lasciato insoddisfatto il fatto che se l’utente non dà autorizzazione alla localizzazione non è possibile ottenere l’informazione richiesta.

Un’altra possibilità di geolocalizzazione, che non ho mai avuto modo di testare, è l’IP GeoLocation.

Mentre con la GeoLocation HTML5 le informazioni si ottengono tramite la connessione wireless o tramite l’identificazione della cella telefonica con cui si è in comunicazione, con l’IP GeoLocation viene eseguito un lookup del proprio indirizzo IP in database che contengono le informazioni utili a definire la provenienza del client.

Le principali differenze fra le due tipologie di localizzazione riguardano:

  • La possibilità di utilizzo: per quanto riguarda le API HTML5, ovviamente è necessario avere un browser che supporti HTML5; l’IP GeoLocation è sempre disponibile;
  • L’autorizzazione all’utilizzo: le API HTML5 necessitano l’autorizzazione dell’utente, mentre l’IP GeoLocation no.
  • La precisione: le API HTML5 possono raggiungere una precsione medio alta, a livello di indirizzo; la geolocalizzazione tramite IP può essere molto meno precisa: nella maggior parte del mondo ha una precisione medio alta a livello di città.

Queste informazioni consentono di valutare diversi scenari. Quello più interessante, risolve il mio cruccio iniziale: è possibile utilizzare una combinazione di HTML5 GeoLocation e IP GeoLocation, facendo in modo che l’IP GeoLocation sia il fallback nel caso l’utente non conceda l’utilizzo delle API HTML5.

function fallback(){
...
}
function getLocation(){
var geo = navigator.geolocation;
if(geo){
geo.getCurrentPosition(showLocation, errorHandler, options);
}
else{
fallback();
}
}

Nella funzione di gestione dell’errore è possibile capire tramite l’argomento passato se è tecnicamente impossibile ottenere la posizione dell’utente o se questo ha negato l’uso della localizzazione.

Un’altra possibilità è quella di decidere che approccio utilizzare in base all’utilizzo che si deve fare della geolocalizzazione: nel caso servano garanzie di precisione può essere meglio utilizzare le API HTML5. Nel caso sia importante capire da che nazione si sta navigando la geolocalizzazione tramite IP può essere sufficiente.

Ci sono diverse librerie che wrappano le funzioni di geolocalizzazione tramite ip. Una possibilità è geolocalizzare tramite apache. Per farlo è necessario installare libGeoIP e il mod_geoip2 sul server.

Dopo l’installazione dei moduli è possibile configurare apache in questo modo:

GeoIPEnable On
GeoIPDBFile /usr/share/GeoIP/GeoIPv6.dat
GeoIPDBFile /usr/share/GeoIP/GeoLiteCity.dat

Fatto questo, è possibile ottenere nella request le informazioni sulla geolocalizzazione; ad esempio, navigando dagli stati uniti si potrebbero ottenere le seguenti informazioni

HTTP_GEOIP_ADDR: 107.170.192.225
HTTP_GEOIP_AREA_CODE: 415
HTTP_GEOIP_CITY: San Francisco
HTTP_GEOIP_CONTINENT_CODE: NA
HTTP_GEOIP_COUNTRY_CODE: US
HTTP_GEOIP_COUNTRY_NAME: United States
HTTP_GEOIP_DMA_CODE: 807
HTTP_GEOIP_LATITUDE: 37.774899
HTTP_GEOIP_LONGITUDE: -122.419403
HTTP_GEOIP_METRO_CODE: 807
HTTP_GEOIP_POSTAL_CODE: 94101
HTTP_GEOIP_REGION: CA
HTTP_GEOIP_REGION_NAME: California

Da qui, come si vede, si ottengono latitudine e longitudine legate all’IP.

Come abbiamo potuto vedere ci sono diverse possibilità per poter ottenere le varie informazioni sulla geolocalizzazione dell’utente, intervenendo nello stack di pubblicazione del sito in vari modi. Si tratta di scegliere quello che fa più al proprio caso. Nel mio, per posizionare l’utente sulla nazione corretta con un basso livello di zoom, l’IP Geolocation è più che sufficiente.

--

--