29/01/2021
Geocodifica diretta ed inversa per un’applicazione Rails: la gemma Geocoder
Gli articoli precedenti hanno illustrato le gemme e il modo in cui queste supportano lo sviluppatore nell’integrazione di codice, generalmente molto lungo e complesso da scrivere.
Geocoder svolge esattamente questo compito, supportando l’utente nello sviluppo.
Innanzitutto, per geocodifica si intende la conversione di indirizzi stradali in coordinate geografiche (latitudine e longitudine), e viceversa, che consentono di identificare in maniera univoca la posizione di un luogo.
Quando il processo di geocodifica parte dall’indirizzo di un punto di interesse per ottenere le coordinate relative, si parla di geocodifica diretta; diversamente, quando si parte dalle coordinate per ottenere l’indirizzo fisico si parla di geocodifica inversa (reverse geocoding).
La gemma Geocoder esegue entrambi i tipi di codifica ed in più permette di effettuare molteplici query - come la richiesta della distanza da un punto, l’impostazione del raggio di controllo e così via.
COME UTILIZZARE GEOCODER
Per utilizzare la gemma, come accennato nei precedenti articoli, bisogna installarla nel progetto Rails, mediante i seguenti comandi:
gem install geocoder
e successivamente:
bundle install
Il modello per il quale si intende utilizzare tale gemma deve avere necessariamente due attributi, atti a memorizzare latitudine e longitudine; pertanto, se non presenti nel modello stabilito, è fondamentale creare una migrazione per aggiungere le due colonne al database. Si utilizzano i comandi:
rails generate migration AddLatitudeAndLongitudeToModel latitude:float longitude:float
rake db:migrate
Nel Model.rb file bisogna “far comprendere” a Geocoder su quale attributo si vuole effettuare la geocodifica; a tal fine, si aggiungono le righe:
geocoded_by :address_field
after_validation :geocode
In questo modo, ogni volta che nel modello di riferimento verrà creata un’entità, la gemma lavorerà per lo sviluppatore preoccupandosi di andare a geocodificare l’indirizzo, memorizzato nel campo address_field, fornendo le relative coordinate geografiche.
Ovviamente, come detto in precedenza, può essere effettuato anche il processo inverso: inserendo latitudine e longitudine nei rispettivi campi del modello, Geocoder estrapolerà per noi l’indirizzo fisico.
A questo punto è possibile effettuare delle interrogazioni per ottenere determinate risposte da Geocoder rispetto ad un indirizzo memorizzato; ad esempio:
Location.near('Salerno, SA, IT', 20)
effettua una ricerca di tutti gli indirizzi memorizzati, che si trovino in un raggio di 20 chilometri dalla località specificata (in questo caso Salerno).
Oppure ancora:
Location.distance_form([40.6752291, 14.7717613])
fornisce come risultato la distanza dal punto indicato dalle coordinate.
In definitiva, esiste una gran quantità di interrogazioni che possono essere effettuate grazie a questa gemma e pertanto le potenzialità che ne derivano sono enormi.
INTEGRARE GOOGLE CON GEOCODER
Geocoder può essere anche collegato a differenti servizi di geocodifica di strade ed indirizzi, tra cui uno dei più famosi è certamente Google con Maps.
Per farlo, innanzitutto è necessario generato il file di configurazione di Geocoder, usando il comando (sempre dalla cartella del progetto, nel terminale):
rails generate geocoder:config
ed integrando poi la chiave API che viene fornita da Google nell’account sviluppatore.
A tal fine è importante ricordare di attivare la Google Maps Places API.
Qualora si decidesse invece di utilizzare un qualunque altro servizio di geocodifica, il vantaggio risiede nel fatto che lo sviluppatore può interagire con Geocoder sempre allo stesso modo, indipendentemente dalla chiave API del servizio scelto.
CONCLUSIONI
Come abbiamo visto, l’integrazione e l’utilizzo della gemma Geocoder è davvero molto semplice e racchiude allo stesso tempo enormi potenzialità. Il tutto usufruibile in maniera gratuita: Geocoder, infatti, è un progetto open source accessibile facilmente al seguente link.