splittare uno shapefile e convertirlo in dxf – riga di comando

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:

  1. lo script va lanciato nella cartella che contiene lo shapefile da splittare (io ho usato sicilia.shp (province), sostituite il nome del vostro shapefile);
  2. sigla.csv è il file che contiene gli attributi con cui splittare, cambiate il nome a piacere;
  3. nella creazione dei file dxf noterete degli avvisi di errore legati alla tabella attributi, è normale non preoccupatevi;
  4. è consigliabile che gli attributi, con cui splittate lo shapefile, non contengano spazi o caratteri speciali in quanto diventeranno i nomi degli shapefile;

 

qgis_sicilia
QGIS – unico shapefile
qgis_split
QGIS e gli shapefile splittati
nomecartelladxf
cartella dei dxf
nomecartellashp
cartella shapefile splittati
cartella1
cartella dopo esecuzione script

affinchè lo script funzioni occorre che siano installate:

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:

https://www.paypal.me/pigrecoinfinito

Lascia un commento

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.