Quesito posto nel gruppo facebook GIS Italia:
Buongiorno a tutti e grazie per avermi accettato in questa community!
Avrei un quesito: è possibile estrarre contemporaneamente più dxf da un vettore in relazione ad un campo della tabella attributi? Es: ho un unico vettore con una colonna attributi riportante una descrizione (strada, edificio, verde pubblico, ecc…) e vorrei generare tanti dxf separati (strada.dxf, edificio. dxf, verde pubblico.dxf, ecc…) senza doverli splittare manualmente e salvarli uno ad uno.
Grazie in anticipo per l’aiuto!
Con QGIS è possibile splittare uno shapefile in funzione di un attributo e successivamente esportare il tutto in un unico file dxf, ma il quesito richiede un output di singoli file dxf.
Un modo rapido per ottenere il risultato è scrivere uno script:
| #!/bin/bash | |
| set -x | |
| #creo cartella di output | |
| mkdir ./nomecartelladxf | |
| mkdir ./nomecartellashp | |
| #trasformo in csv lo shapefile | |
| ogr2ogr -f CSV sicilia.csv sicilia.shp; | |
| # estraggo la colonna che mi serve e rimuovo l'intestazione | |
| csvsql --query "select SIGLA from sicilia" sicilia.csv | tail -n +2 >./sigla.csv; | |
| # ciclo per splittare lo shapefile | |
| while read p; do | |
| ogr2ogr -f "ESRI Shapefile" -where "SIGLA ='$p'" ./nomecartellashp/$p.shp sicilia.shp; | |
| done <./sigla.csv; | |
| #ciclo per convertire da shp in dxf | |
| for i in ./nomecartellashp/*.shp; | |
| do | |
| #crei una variabile che usi per estrarre nome e estensione | |
| filename=$(basename "$i") | |
| #estrai estensione | |
| extension="${filename##*.}" | |
| #estrai nome file | |
| filename="${filename%.*}" | |
| ogr2ogr -f DXF ./nomecartelladxf/"$filename".dxf ./"$i"; | |
| done |
copiarlo ed incollarlo nella shell bash ed in pochi secondi (dipende dal peso dello shapefile) si otterrà il risultato voluto: tutti gli shapefile i dxf saranno raccolti rispettivamente nelle cartelle nomecartellash, nomecartelladxf.
Osservazioni:
- lo script va lanciato nella cartella che contiene lo shapefile da splittare (io ho usato sicilia.shp (province), sostituite il nome del vostro shapefile);
- sigla.csv è il file che contiene gli attributi con cui splittare, cambiate il nome a piacere;
- nella creazione dei file dxf noterete degli avvisi di errore legati alla tabella attributi, è normale non preoccupatevi;
- è consigliabile che gli attributi, con cui splittate lo shapefile, non contengano spazi o caratteri speciali in quanto diventeranno i nomi degli shapefile;





affinchè lo script funzioni occorre che siano installate:
- librerie GDAL/OGR – fare riferimento a questo e questo;
- tool csvkit – fare riferimento a questo e a questo;
per chi usa windows 10, ecco una guida per installare la bash ubuntu.
NOTE FINALI: per chi fosse alle prime armi, con la riga di comando, sembrerebbe tutto difficile e macchinoso, ma vi assicuro che dopo qualche tempo di esercizio e con un po’ di buona volontà tutto diventa chiaro e semplice.
Lo script è migliorabile, ma credo sia un buon inizio e soprattutto molto didattico.
Un enorme grazie al mio amico Andrea Borruso per avermi trasmesso un po’ della sua passione.
video:
donate: