[Talk-it] Import Dati regione Puglia

Luca Riccardi l.riccardi90 a gmail.com
Mar 3 Apr 2018 11:32:46 UTC


Ciao a tutti,

volevo informarvi che in questi giorni ho fatto un refactor del progetto
cambiando diverse cose.
In buona fede speravo di offrire alla comunità qualcosa di nuovo, ma visti
i vari scogli incontrati ho deciso di eliminare tutti gli automatismi e
ridurre allo stretto necessario le funzionalità: convertire un csv in un
file osm.

Premetto che trovate tutto qui:

- OSM wiki:  https://wiki.openstreetmap.org/wiki/OpenData_Puglia_Import
- repo GitHub: https://github.com/londrake/jcsv2osm/

ovviamente la wiki verrà aggiornata di pari passo, non appena si avranno
nuovi file (osm, nuovi dataset) o individuati i tag e comunicando alla
comunità i progressi fatti.

In breve: dato che i csv da processare non sono ben formattati per una
diretta conversione in osm (con csv2osm) ho dovuto fare una fase di
pre-processing (attraverso un mio script) dove mappo ciascun header - di
interesse - del csv con una chiave di osm (se la corrispondenza è univoca).

Banalmente header = "titolo del bene rappresentato" --> key = "name" il cui
valore v, sarà il contenuto di ciascuna riga per la colonna "titolo del
bene rappresentato" .

Data la natura dei dataset, non tutti gli header possono essere mappati in
un unico valore di k ma il valore di k e v dipendono delle volte dal
contenuto della cella legata ad h.

Per esempio, la colonna Genere_1 contenente il valore MASSERIA identifica
la tipologia del nodo, ma il tag corrispondente a MASSERIA è k = place e v
= hamlet.
Per questa operazione viene usato un dizionario (json) popolato a mano che
tiene traccia proprio di questa corrispondenza.
Sperando di fare cosa gradita l'ho "esteso al multilingua", ovvero ogni
oggetto del json è corredato di una serie di localizzazioni del vocabolo:
it_IT = Valore, en_EN = Value legati a una lista di tag espressi come
coppia di chiave-valore, in modo tale che in base alla lingua predefinita,
l'algoritmo di ricerca andrà a guardare nel linguaggio selezionato.

L'output di questo script è un csv "well formatted" per csv2osm e quindi si
ottiene il file osm corrispondente al dataset.

Ricapitolando:

Dataset.csv => Dataset_clean.csv(* )=> Dataset2osm.csv => dataset.osm(**)


*Per alcuni dataset come quelli contenenti le collezioni, ad esempio quello
sulle masserie, vi sono diversi record che fanno capo a un bene fisico: la
MASSERIA X. Per questi dataset, oltre alla fase di pulizia dei record le
cui colonne di interesse (da mappare) contengono valori nulli o incorretti,
viene eseguito un processo di "accorpamento" dove emerge il solo BENE
FISICO, ma mantenendo il riferimento alla risorsa digitale nella Digital
Library (concatenate dalla sequenza di caratteri -|-).

Spiego meglio: il dataset D contiene delle foto (F) riguardanti un bene o
collezione (B) ed un riferimento della foto del bene sul portale (L) che
contiene info aggiuntive.
F1 | B1 | L1
F2 | B1 | L2
F2 | B1 | L3
F1 | B2 | L1
F2 | B2 | L12

diventa

F1 | B1 | L1 -|- L2 -|- L3
F1 | B2 | L1 -|- L2

quindi banalmente B1 e B2 verranno prese in considerazione come la risorsa
fisica che si vuol mappare per il dataset D.


** In realtà lo script implementa qualche features aggiuntiva, come il
resume su i nodi che non hanno trovato alcuna corrispondenza sulla
categoria (evitando di riprocessare l'intero csv) o integrando (quasi
totalmente) la funzione di serializzazione e controllo delle coordinate di
csv2osm, serializza direttamente un file osm evitando il penultimo step.
Un dataset di esempio è scaricabile qui:
https://github.com/londrake/jcsv2osm/tree/master/test%20and%20result/masserie_clean_csv



Per quanto riguarda la conflation, come suggerito da Maurizio Napolitano
nei primi post,  prima la eseguivo facendo un controllo stretto (soglia del
60%, che secondo la letteratura individua due stringhe identiche) tra il
nome del mio PO  il valore del tag "name"  di una lista di node e way
ottenuti attraverso una query Overpassturbo in un raggio di 200mt dalle
coordinate in mio possesso.
Questo meccanismo l'ho già implementato, e posso integrarlo facilmente, se
per voi risulta idoneo. In alternativa, come espresso nella pagina del
progetto la conflation verrà eseguita col plugin di JOSM.

N.B. Per via della concatenazione  L1 -|- ... -|- Ln, csv2osm è stato
modificato lievemente per gestire questo fattore. Ovvero se il valore
contiene -|-, viene fatto una esplosione su quel carattere e per ogni
valore viene generato un tag k = L1, k = L2,..., k = Ln.

Fatemi sapere se è tutto ok ed accettabile, ed in caso positivo come
procedere per ottenere l'autorizzazione.

P.s. Per quanto riguarda il consiglio sugli edit, la persona che gestirà
l'upload si sta attrezzando per prendere dimestichezza con l'ambiente. :)

Luca Riccardi



Il giorno 29 gennaio 2018 10:50, Andrea Musuruane <musuruan a gmail.com> ha
scritto:

> Ciao,
>
> 2018-01-29 10:45 GMT+01:00 Luca Riccardi <l.riccardi90 a gmail.com>:
>
>> Ciao,
>>
>> proverò a fare qualche import, ho già seguito il tutorial che mette a
>> disposizione OSM, e stavo provando a creare un nodo con JOSM, anche solo
>> per vedere il file OSM XML che genera ( nel caso fosse possibile).
>>
>
> Il suggerimento era di fare qualche edit (non qualche import) prima di
> avventurarsi con l'import per capire il funzionamento di OSM (ad esempio
> cos'è un changeset).
>
> Ciao,
>
> Andrea
>
>
> _______________________________________________
> Talk-it mailing list
> Talk-it a openstreetmap.org
> https://lists.openstreetmap.org/listinfo/talk-it
>
>
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.openstreetmap.org/pipermail/talk-it/attachments/20180403/fa1328cc/attachment-0001.html>


Maggiori informazioni sulla lista Talk-it