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 <musur...@gmail.com> ha scritto: > Ciao, > > 2018-01-29 10:45 GMT+01:00 Luca Riccardi <l.riccard...@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@openstreetmap.org > https://lists.openstreetmap.org/listinfo/talk-it > >
_______________________________________________ Talk-it mailing list Talk-it@openstreetmap.org https://lists.openstreetmap.org/listinfo/talk-it