Geocodifica - Esempio Scuole Piemontesi

Cosa significa geocodificare

Geocodificare significa passare da un indirizzo (o un nome di città) ad una coppia di coordinate (X,Y).

Indice:

A cosa serve geocodificare

Molto spesso capita di voler visualizzare su una mappa degli indirizzi, piuttosto che delle coordinate. Il caso tipo è quello urbano, nel quale le persone non vogliono recarsi a 45N,43W, ma in Via Roma 6, Torino.

Tra le prime applicazioni ad utilizzare le geocodifica, possiamo pensare alle Pagine Gialle. (vedi un esempio per fissare le idee: cerco tutti i panettieri a Torino, voglio vedere un elenco e una mappa)

 Esempio Pagine Gialle 

I servizi come Goolge Maps, Yahoo Maps, MapQuest hanno successivamente occupato lo spazio che inizialmente era solo di Pagine Gialle e Tuttocittà.

Cosa mi serve per geocodificare

Proviamo a capire di cosa abbiamo bisogno per geocodificare, utilizzando un esempio.

L'esempio - il piccolo comune
Siamo appena stati assunti in un piccolo comune, di 1000 abitanti.
Ci viene chiesto di mostrare su una mappa, per ogni numero civico, il numero di residenti, in modo da poter dimensionare correttamente il servizio di raccolta differenziata.

Ci viene fornito:

  1. il database dell'anagrafe, che ha questa struttura:
    [Nome], [Cognome], [Via], [Civico]
  2. una carta tecnica realizzata con Autocad, da usare come sfondo.

Come procediamo?

Possiamo procedere almeno in 4 modi:

  1. [A cui pensa la maggiorparte delle persone, di solito] - Andiamo in giro con un GPS e segnamo tutti i numeri civici, poi torniamo in ufficio e posizioniamo tutti i punti che abbiamo tracciato sul GIS (usando una carta tecnica come sfondo)
    Questo metodo funziona se abbiamo pochi civici da segnare, se le vie sono larghe e i civici non troppo vicini, altrimenti l'errore del GPS supera la precisione che ci è necessaria, e il lavoro viene di scarsa qualità, va comunque rivisto e modificato fortemente a mano.
  2. Procediamo "ad occhio", segnando visivamente i civici sulla cartografia di sfondo. 
    Questo sembra un approccio meno professionale, ma probabilmente è più preciso e rapido del precedente
  3. Compriamo da NavTeq o Teleatlas le cartografie con le indicazioni dei Civici
    Soluzione probabilmente molto costosa (l'ultima volta in cui mi è capitato di chiedere un'offerta per una cosa del genere mi sono stati chiesti 15.000€ per 11 comuni). Adeguata se il lavoro non è limitato ai 1000 abitanti di questo esempio, oppure se abbiamo bisogno delle ricchissime e precisissime informazioni che ci vengono fornite (sensi unici, velocità di percorrenza, tipo di strada, vari altri livelli)
  4. Se siamo in Piemonte e lavoriamo per un ente pubblico, l'Ente può rivolgersi al CSI che ha ceocodificato tutte le Provincie e che fornisce il dato gratuitamente agli enti (e con politiche variabili ai privati). - vedi anche il repertorio cartografico regionale

L'algoritmo di geocodifica

Ora che abbiamo tutti i numeri civici sotto forma di oggetti (feature) sul nostro GIS (abbiamo quindi una tabella di geocodifica), ci serve un algoritmo di geocodifica per far corrispondere ogni persona registrata all'anagrafe con la sua coordinata X,Y sulla mappa.

Tabella Anagrafe

Nome Cognome Indirizzo
Giovanni Rana Via Roma 6
Massimo Infunti Loc Ciocchini 18
Paolo Rossi Via Vittorio, 5

Tabella di Geocodifica

Indirizzo Civico X Y
Via Roma 1 45 20
Via Roma 2 45 21
Via Roma 6 51 43
....      
Via Vittorio 5 43 23
...      
Loc Ciocchini 18 13 43

Possiamo provarne a scrivere uno noi, o procedere a mano, ma si tratta di una strada piena di piccole noiosissime insidie. Solo per citarne alcune:

  • La normalizzazione dei nomi delle strade (es: Via S. Tommaso, Santommaso, San Tommaso, Via O. Vigliani, Onorato Vigliani, On. Vigliani, etc)
  • I numeri civici strani (es: 2b/4)
  • La scomposizione dell'indirizzo in parti, spesso non è ovvia: (es: Via 20 Settembre 43 b)

Per questo può essere utile usare un sistema già testato di geocodifica.

I più utilizzati sono:

  • Google Maps Geocoding API (potentissimo, con un algoritmo di matching incredibilmente potente) - ma non autorizza ad esportare le coordinate X e Y, quindi si possono solo visualizzare i risultati.
    Fino a poco tempo fa era disponibilie un servizio online, gratuito che permetteva di esportare i risultati della geocodifica di google in formato CSV (www.batchgeo.com). Il servizio è sempre disponibile, sempre molto interessante ma non permette di esportare le coordinate.
  • Street Map Europe della Esri (prodotto commerciale, che però ha anche una versione utilizzabile gratuitamente online, che si integra con ArcGIS, ma purtroppo non è così ben fatta come quella di Goolge)

Esercizio scuole (aggiornato Marzo 2012)

Obiettivo: creare una mappa che mostri tutte le scuole della città di Rivoli (TO).

Il dato - non è ovvio recuperare un elenco completo di scuole.... se siete in Piemonte potete fare come me

 

  1. Mi sono collegato al sito della regione che contiene l'elenco delle scuole http://www.sistemapiemonte.it/scuole/indirizzario/caricaAnagrafica.do
  2. Ho esportato il file risultante in CSV
  3. Ho convertito le virgole in pipe (|) e aggiunto una colonna "STATO", valorizzando tutte le righe con "IT" (che sta per italia) - per fare questo ho usato notepad++

Lo sfondo

Per prima cosa, vi consiglio di aggiungere un layer di sfondo con la cartografia, utilizzando le mappe di base che potete prelevare gratuitamente a questo indirizzo ArcGIS Online Map Service

 

 

Vi consiglio di scaricare il file .lyr (World Street Map) - View Service In ArcMap (per la versione 9.2 usate il file allegato in fondo a questa pagina)

 

Il servizio di geocodifica

Aggiungete un servizio di geocoding gratuito collegandovi a questo indirizzo
http://www.esri.com/software/arcgis/arcgisonline/task_services.html

Scegliete World Geocoding, Europe e ArcGIS Desktop/Explorer URL: http://tasks.arcgisonline.com/ArcGIS/rest/services

  

Dentro ArcGIS, scegliete Geocoding > Add Address Locator. Dal selettore del disco ("cerca in"), dovete impostare ArcGIS Server, aggiungere un nuovo servizio e incollare il link http://tasks.arcgisonline.com/ArcGIS/rest/services

Selezionate questo servizio che avete aggiunto come servizio di geocodifica preferito, all'interno scegliete LOCATORS e TA_ADDRESS_EU

      

La geocodifica delle scuole

Ultimo passaggio è quello di sceglere Tools > Geocode e dare in pasto al nostro oggetto la tabella delle scuole ritrovata sopra.

  

 

  

[Percentuale di matching con i dati di questo esercizio: 51%, con google arriviamo a 95%]


 

Metodo 2 - Una volta il mio preferito, ora da rivedere per questioni di licenza di google

  1. Ho buttato il file risultante in http://www.batchgeocode.com/ e copiato il risultato nel mio file di testo originario
  2. Ho importato come CSV il file in OpenOffice, facendo attenzione a due cose
    1. Che il filtro di importazione usasse le | e non le ,
    2. Che le colonne lat e long fossero di tipo "TEXT" e non "STANDARD" (Questa è la cosa più sottile) - Per Openoffice 3, invece l'impostazione è US_ENGLISH
  3. Ho salvato il tutto in un file dbf (aumentando le cifre visualizzate per latitudine e longitudine) ed ho convertito la tabella in uno shape file usando queste impostazioni:
    1. X = LONG
    2. Y = LAT
    3. Z - lascia vuoto
    4. COORDINATE: Geographic/World/WGS 84
  4. Ho buttato lo shape risultante sulla mia mappa ed ho usato la conversione WGS84_32N_to_ED50