OSMIT 2013 Rassegna di toponomastica OpenData (oltre a OSM) Daniele Forsi http://www.forsi.it/osm Licenza Creative Commons Attribuzione 3.0 Open Data ● "I dati aperti, comunemente chiamati con il termine inglese open data anche nel contesto italiano, sono alcune tipologie di dati liberamente accessibili a tutti, privi di brevetti o altre forme di controllo che ne limitino la riproduzione e le cui restrizioni di copyright eventualmente si limitano ad obbligare di citare la fonte o al rilascio delle modifiche allo stesso modo." http://it.wikipedia.org/wiki/Dati_aperti Il progetto Open Definition di Open Knowledge Foundation utilizza la seguente frase per definire dati (e contenuti) aperti: «un contenuto o un dato si definisce aperto se chiunque è in grado di utilizzarlo, ri-utilizzarlo e ridistribuirlo, soggetto, al massimo, alla richiesta di attribuzione e condivisione allo stesso modo» Open Street Map ● XML o PBF OdBL Open Street Map ● Diversi modi per ottenere i dati ● – Scaricare “Planet” o “Italy” – Usare Overpass (linguaggio specifico), JOSM (GUI) – Più informazioni nel wiki di OSM: Downloading_data Diversi programmi per leggere i dati: – Osmosis (Java), Osmium (solo un header C++) – Ricercare direttamente il testo nel file XML – Più informazioni nel wiki di OSM: Category:OSM_processing count | key + 826029 | name 7161 | name:it 5406 | name:de 326 | name:sl 251 | name:fur 131 | name:left 116 | name:right 46 | name:en 42 | name:sc 40 | name:old 33 | name:fr 30 | name:ru 27 | name:scn 18 | name:he 14 | name:sv 11 | name: 8 | name:pl 6 | name:la 5 | name2 5 | name:botanical 5 | name:explanation 5 | name:rm 3 | name:eml 3 | name:es 2 | name:als 2 | name:be 2 | name:da 2 | name:It 2 | name:lij 2 | name:loc 2 | name:sk 2 | name:vi 1 | name 1 | name_alt 1 | name:bridge 1 | name:Ghedi 1 | name_it 1 | name:Montirone 1 | name:nl 1 | name:pt 1 | name:short 1 | name:simple 1 | name:source 1 | name:u 1 | name:uk 1 | name:zh (46 righe) Esempio Osmosis+PostgreSQL osmosis readpbf file=italy.pbf tagfilter acceptways highway=* tagfilter acceptways name=* tagfilter rejectnodes tagfilter rejectrelations writepgsqldump ● SELECT tags>'name' FROM ways WHERE tags>'highway' IN ('primary', 'secondary'); Query per postgresql con il “simple schema” che usa HSTORE per i tag. ● Quale tag usare? name name:* alt_name loc_name old_name ● Oltre 826'000 highway + name (erano oltre 600'000 un anno fa) ● name:botanical="via Marconi" ?!? {24824182,33099697,118595556,161826802,188313884} Catasto – Senza licenza – CSV ● ● ● L'Agenzia delle Entrate rende disponibili alcuni dati senza una licenza esplicita, sono open per default (Legge 17 dicembre 2012 n. 221)? Non c'è l'indicazione della licenza né nel sito web, né nei singoli archivi ZIP, né nel sito FTP (ho guardato in tutte le cartelle superiori il 27/08/2013). Ci sono 101 archivi provinciali per il Catasto: compresa AO, escluse BZ e TN. Archive: ark/ark_ag.zip I nomi delle strade sono nei file *-topo-th.dat contenuti in ogni archivio Length Date Time Name 32 19980611 09:36 ag/NCLAGV8A.DAT 65274 20060607 17:41 ag/AGTAR.DAT 3082236 20100415 13:11 ag/AGtopoth.dat 23028 19980615 13:46 ag/AGZON.DAT 860 19980611 09:36 ag/NCLAGV1.DAT 3432 20020329 17:05 ag/NCLAGV2.DAT 2870 20020329 17:06 ag/NCLAGV3.DAT 1344 20020409 18:39 ag/NCLAGV4.DAT 4420 20020409 18:39 ag/NCLAGV5.DAT 1720 19980611 09:36 ag/NCLAGV7.DAT 1564 19980611 09:36 ag/NCLAGV8.DAT 3186780 11 files Oltre OSM: alcune fonti “locali” ● XLS CC0 Comune di Bari ● CSV CC0 Comune di Cesena ● SHP CC-BY Comune di Firenze ● CSV ??? ● DBF CC-BY Comune di Pavia ● SHP CC0 ● SHP IODL-2.0Comune di Venezia ● CSV IODL-2.0Comune di Vicenza Comune di Genova Comune di Trento 1 XLS 3 CSV 3+1 SHP Bari – CC0 – XLS ● http://opendata.comune.bari.it/ ● Campi: Circ. DENOMINAZIONE CARATTERISTICA BIOGRAFICA LOCALITA' PRECEDENTE INDIVIDUAZIONE UBICAZIONE NUMERAZIONE CIVICA CAP ● Sostituzioni (Python): name .replace("Gen.","Generale") .replace("Mons.","Monsignor") .replace("Parall.","Parallela").replace("Prov.le"," Provinciale") .replace("Trav.","Traversa") parentesi tonde e quadre e altri caratteri non alfabetici e qualche lettera accentata (“Libertà”, “Strada dé”) Bari – CC0 – XLS • 2336 nomi (cognome nome DUG in un campo solo): DENOMINAZIONE ABBA’ GARIMA’ (Largo) ABBAZIA SANTA SCOLASTICA (Largo) ABBRESCIA F.SCO SAVERIO (Via) ABRUZZI (Via) ACACIA (Viale dell’) ACCETTURA VITO (Via) ACCOLTI-GIL BIAGIO (Viale) – ACCOLTI-GIL SALVATI CAROLINA (Via) ACQUAVIVA ANDREA MATTEO (Via) Bari – CC0 – XLS • Prima converto da formato XLS a CSV con xls2csv • Poi leggo il csv con Python: def __iter__(self): with open(self.filename, 'rb') as csvfile: reader = csv.reader(csvfile, delimiter=',', quotechar='"') reader.next() pred_name = None for row in reader: if row == ['\x0c']: continue id, name = None, row[1].strip() if pred_name != name: yield id, name pred_name = name Cesena – CC0 – CSV ● https://servizi.comune.cesena.fc.it/opendata/ ● Codifica ISO-8859 ● Campi: Codice via Tipo Denominazione Località Quartieri Estremi ● Sostituzioni: "CIO": "CERCHIO", "COM": "COMUNALE", "CSO": "CORSO", ecc. e ' SANT''', ' SAN ', ' SANTA ', ' SAN ' Cesena – CC0 – CSV ● 1852 nomi (DUG, cognome nome): Tipo Denominazione VIA ADUA PZA AGUSELLI VIA ALBERTINI ANNIBALE PZA ALBIZZI VIA ALBIZZI VIA ALDINI GAL ALMERICI PZA ALMERICI PZA AMENDOLA GIOVANNI Cesena – CC0 – CSV ● https://servizi.comune.cesena.fc.it/opendata/ ● Codifica ISO-8859 ● Campi: Codice via Tipo Denominazione Località Quartieri Estremi ● Sostituzioni: "CIO": "CERCHIO", "COM": "COMUNALE", "CSO": "CORSO", ecc. e ' SANT''', ' SAN ', ' SANTA ', ' SAN ' Firenze – CC-BY – SHP ● ● ● http://opendata.comune.fi.it/ Maiuscole/minuscole “quasi come in OSM” (iniziali delle preposizioni in minuscolo, dei mesi in maiuscolo) Con ogr2ogr si può trasformare in molti formati, es. CSV ogr2ogr f csv destdir select TOPONIMO trattistradaliLine.dbf ● Oppure con shp2pgsql si può importare in PostgreSQL shp2pgsql W latin1 D d s 3003 trattistradaliLine mio_stradario_firenze | psql d osm ● Posso fare lo zoom su un bounding box Firenze – CC-BY – SHP ● 2340 nomi distinti (un campo solo): TOPONIMO Via Odoardo Spadaro Via Ruggero Bonghi Via Matteo Marangoni Via Matteo Marangoni Via Matteo Marangoni Via Domenico Comparetti Viale del Trotto Viale del Trotto Viale F�dor Mihajlovi� Dostoevskij ● ● Ops, nomi duplicati, ops, codifica sbagliata :-) Soluzioni: sort u | iconv f ISO88591 Genova – Senza licenza – CSV ● http://servizionline.comune.genova.it/opendata.asp ● Campi: "CODICE_VIA";"NOME_VIA";"NUMERO";"LETTERA"; "COLORE";"INTERNO";"LETTERA_INTERNO";"SCALA"; "ABITATIVO";"SEZIONE_CENSIMENTO_2011" ● Abbreviazioni e spazi mancanti, grazie a sabas88 abbiamo una tabella di corrispondenza (oltre ad alt_name): OSM Comune Calata Giovanni Falcone e Paolo Borsellino CALATA FALC BORS ECOMP SACRF Campopisano ******** CAMPOPISANO Giardini Carlo Alberto Dalla Chiesa GIARDINI C.A.DALLACHIESA Piazza dei partigiani caduti per la libertà PIAZZA PART CADUTI LIBERTA Piazza delle Vittime della Stazione di Bologna PIAZZA VITTIME DI BOLOGNA Salita nuova di Nostra Signora del Monte SALITA NUOVA NS DEL MONTE Genova – Senza licenza – CSV ● 3412 nomi distinti, 423765 righe, una riga per ogni numero civico (DUG nome cognome in un campo solo): name VIA GIUSEPPE CESARE ABBA VIA DELLE ACACIE VICO ANTICA ACCADEMIA VIA DELL ACCIAIO SALITA ACCINELLI VIA ACCINELLI VIA GIOVANNI ACERBI VICO ACQUACALDA SALITA SUPER. ACQUAMARSA Pavia – CC-BY – DBF ● ● ● I nomi sono in un DBF separato dallo SHP, ma si può usare ugualmente ogr2ogr Questo file non era presente sul sito del Comune ma grazie a SC tramite talk-it è stato aggiunto ogr2ogr f csv sql "SELECT tp_str_cod, tp_str_nom FROM \"12822T030101\" WHERE tp_str_cod NOT IN ('30003', '30004', '30006')" stradario 12822T030101.dbf Pavia – CC-BY – DBF ● 768 nomi (DUG cognome nome in un campo solo): name VIA AALTO ALVAR VIA ABBIATEGRASSO VIA ABRUZZO VIA ACERBI EZECHIELE STRADA ACQUANEGRA VIA ACQUI VIA ADDA PIAZZA ADDOBBATI PIETRO VIA ADIGE Trento – CC0 – SHP ● http://dati.trentino.it ● Importo con shp2pgsql: shp2pgsql D d W latin1 grafo_web.shp mio_stradario_trento | psql q d osm ● Posso fare lo zoom su un bounding box ● Per certe applicazioni è utile estrarre le parole: SELECT DISTINCT regexp_split_to_table(desvia, ' ') AS word FROM stradario_trento; ● Alcuni nomi di persona sono abbreviati, ma non tutti (non sembra un problema di spazio, es. “VIA E. DE AMICIS” e “VIA EDMUND MACH”, “VIA F. PETRARCA” e “VIA FRANCESCO FERRUCCIO”) Trento – CC0 – SHP ● 1113 nomi 4972 righe desvia VIA DELLA CERVARA VIA MISSIONI AFRICANE VIA SANT'ANNA STRADA DI VIGOLO BASELGA VIA DEL PRAOL PIAZZA NATALE TOMMASI VIA MARGONE VIA DEI POMARI Venezia – IODL2.0 – SHP ● http://dati.venezia.it/ ● Importo con: shp2pgsql D d W latin1 s 3004 tp_str.shp mio_stradario_venezia | psql q d osm ● NON posso fare facilmente lo zoom su un bounding box perché le strade sono mappate come aree, sono interrotte agli incroci con strade più importanti e gli stessi nomi sono usati in zone diverse delle città Venezia – IODL2.0 – SHP ● 6234 righe alcuni nomi esistono in diverse parti di Venezia (DUG separato, nome e cognome) ts_specie ts_denom VIA ARCHIMEDE VIA LUCA SIGNORELLI VIA SANDRO BOTTICELLI VIA PITAGORA VIA PORFIRIO VIA ERACLITO VIA PLOTINO VIA ANTONIO VASSILACHI VIA JACOPO DA PONTE Vicenza – IODL-2.0 – CSV ● ● ● ● http://www.comune.vicenza.it/servizi/opendata/opendata.p hp CSV contemporaneamente delimitato e a larghezza fissa! Campi: CODVIA;TIPO; DESCRIZIONE_BREVE; DESCRIZIONE_ESTESA; DEDICA; ATTO_INTITOLAZIONE Ricodifica (Python): desc = row[3].strip() .decode('ISO88591').encode('utf8') Vicenza – IODL-2.0 – CSV ● 1126 nomi (DUG separato e a scelta cognome nome abbreviato, oppure non abbreviato, confrontando le due versioni riesco a girare nome e cognome, eccetto per qualche errore nell'originale, quindi "DALLA CHIESA GEN. C. A." diventa "GEN. CARLO ALBERTO DALLA CHIESA") name AUTOSTRADA MILANO-VENEZIA VIA ABETONE VIA Paolo ABRIANI via pp STRADA DELL'ACQUEDOTTO ROMANO VIA ADDA VIA Konrad ADENAUER VIA ADIGE VIA Eugenio ALBERI Catasto – Senza licenza – CSV ● ● ● L'Agenzia delle Entrate rende disponibili alcuni dati senza una licenza esplicita, sono open per default (Legge 17 dicembre 2012 n. 221)? Non c'è l'indicazione della licenza né nel sito web, né nei singoli archivi ZIP, né nel sito FTP (ho guardato in tutte le cartelle superiori il 27/08/2013). Ci sono 101 archivi provinciali per il Catasto: compresa AO, escluse BZ e TN. Archive: ark/ark_ag.zip I nomi delle strade sono nei file *-topo-th.dat contenuti in ogni archivio Length Date Time Name 32 19980611 09:36 ag/NCLAGV8A.DAT 65274 20060607 17:41 ag/AGTAR.DAT 3082236 20100415 13:11 ag/AGtopoth.dat 23028 19980615 13:46 ag/AGZON.DAT 860 19980611 09:36 ag/NCLAGV1.DAT 3432 20020329 17:05 ag/NCLAGV2.DAT 2870 20020329 17:06 ag/NCLAGV3.DAT 1344 20020409 18:39 ag/NCLAGV4.DAT 4420 20020409 18:39 ag/NCLAGV5.DAT 1720 19980611 09:36 ag/NCLAGV7.DAT 1564 19980611 09:36 ag/NCLAGV8.DAT 3186780 11 files Catasto – Senza licenza – CSV ● ● ● ftp://ftp.finanze.it/pub/docfa4/ Secondo me è utilizzabile perché non c'è una licenza esplicita che lo vieta (né nel file, né nella pagina, né nel sito) quindi ricade nel "open per default" (Legge 17 dicembre 2012 n. 221) vedi wikipedia Nomi referenziati tramite Codice Belfiore (ark_comurb.zip nell'FTP, formato proprietario? record dimensione fissa) 00000000 30 7e 00 00 00 00 00 00 30 30 31 31 31 37 30 38 |0~......00111708| 00000010 32 32 34 38 39 32 30 30 31 31 31 37 30 38 32 32 |2248920011170822| 00000020 34 38 39 32 00 3e 00 02 00 00 00 00 00 00 00 00 |4892.>..........| 00000030 01 00 00 00 00 00 00 00 00 46 00 00 00 46 00 00 |.........F...F..| 00000040 00 00 00 00 00 00 00 00 00 00 00 00 02 00 01 00 |................| 00000050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000060 00 00 00 00 00 00 00 00 00 00 00 00 58 00 32 dc |............X.2.| 00000070 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000080 40 46 41 31 41 41 20 54 4f 52 49 4e 4f 20 20 20 |@FA1AA TORINO | 00000090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | * 000000b0 20 20 20 20 20 20 20 20 20 4c 32 31 39 54 4f 31 | L219TO1| 000000c0 20 20 20 20 20 20 20 20 40 46 41 31 41 43 20 41 | @FA1AC A| Catasto – Senza licenza – CSV ● 1'233'526 nomi (nome cognome virgola DUG in un campo solo) ABETE, VIA DELL` ABRUZZI, VIA ACACIE, VIA DELLE ACCIAIO, PIAZZALE DELL` ACQUAPALOMBO, VOCABOLO ACQUASPARSA, STRADA ACQUAVIVA, VOCABOLO (COLLESCIPOLI) ADDA, VIA ADIGE, VIA ADRIATICO, PIAZZA Problemi generali ● Trovare i link, scaricare i file singolarmente, convertirli da formati eterogenei ● Mancano le lettere accentate (ASCII 7 bit) ● Errori di battitura “0VIDIO” ● Apostrofi e virgolette singole mischiate ● Ordine mischiato DUG/nome nello stesso dataset ● Qualcuno, diverso da chi li ha creati, li controlla prima di pubblicarli? Risultati – Nomi dei Comuni ● ● Confronto stradari comunali http://www.forsi.it/osm/spellcheck/highway/stradario/ Esempio: Trento 721 entrambi, 138 OSM, 398 Comune Risultati – Nomi del catasto ● ● Ortografia strade http://www.forsi.it/osm/spellcheck/highway/boundary/ Esempio: Rovereto 46 nomi da controllare su 292 Risultati – Nomi del catasto capoluogo prima Ancona Dizionario per aspell con 169037 parole diverse (sono 22410 parole in quello fornito con Linux), 1795 parole scartate (quelle che contengono numeri arabi e quelle con la E accentata!) dopo % 8 6 -25% 93 68 -27% Bari 183 56 -69% Bologna 255 23 -91% Cagliari 163 41 -75% 1 1 0% 50 18 -64% Firenze 441 175 -60% Genova 351 47 -87% L'Aquila 47 12 -74% Milano 178 30 -83% Napoli 315 114 -64% Palermo 400 97 -76% Perugia 220 63 -71% Potenza 17 9 -47% Roma 2776 107 -96% Torino 132 17 -87% Trento 238 190 -20% Trieste 328 55 -83% Venezia 1059 476 -55% Aosta ● 21/08/13 Campobasso Catanzaro Grazie. Domande? Daniele Forsi http://www.forsi.it/osm [email protected] Openstreetmap: dforsi Credits ● User:Aury88 immagine 256px-OSMItaly.svg.png (CC-BY-SA 3.0) ● Open_Data_stickers.jpg (CC0) ● http://opendata.comune.bari.it/ CC0 Comune di Bari ● https://servizi.comune.cesena.fc.it/opendata/ CC0 Comune di Cesena ● http://opendata.comune.fi.it/ CC-BY Comune di Firenze ● http://servizionline.comune.genova.it/opendata.asp Comune di Genova (senza licenza esplicita) ● http://opendata.comune.pavia.it/ CC-BY Comune di Pavia ● http://dati.trentino.it CC0 Comune di Trento ● http://dati.venezia.it/ IODL-2.0 portale.comune.venezia.it ● http://www.comune.vicenza.it/servizi/opendata/opendata.php IODBL-2.0 Comune di Vicenza ● ftp://ftp.finanze.it/pub/docfa4/ dati del Catasto