QGIS: DXF 3D da shp (2D/3D)

Facebook è una fonte inesauribile di ispirazione, ecco un quesito posto nel gruppo pubblico ‘QGIS SICILIA‘:

ESPORTAZIONE DXF 3D
Con Grass riuscivo ad esportare le curve di livello generate all’interno del programma portandomi dietro le informazioni altimetriche. In sostanza un DXF 3d, utilizzando il comando v.out.ogr e non il v.out.dxf (che le schiacciava su quota zero). In QGis non risco a trovare il modo per uscire con un DXF 3D e non riesco neanche a trovare il comando Grass v.out.ogr. Gis 2.12.1 – Lyon su Mac osx El Capitan.

In QGIS esistono vari modi per esportare uno shapefile in DXF, utilizzando procedure native di QGIS, utilizzando il Processing o la shell di OSGEO4W:

  1. Procedure native di QGIS:
    1. da Progetto => Esportazione DXF…;
    2. selezionando il layer: Salva con nome… e poi si seleziona il formato DXF;
  2. utilizzando il Processing (geo-algoritmi GRASS):
    1. v.out.dxf;
  3. shell di OSGEO4W:
    1. ogr2ogr -f "DXF" {outfile} {infile} {-zfield ColumnWithZValue};

ognuno di queste procedure ha delle particolarità, tutte tranne due  permettono di ottenere, in output, un DXF 3D ma sotto certe ipotesi di partenza; analizziamole una per una.

Esportazione DXF …

dal menù Progetto => Esportazione DXF …

Immagine 5
finestra di dialogo Esportazione in DXF

questa procedura, nativa di QGIS, permette di esportare uno o più layer presenti nel progetto (appiattendo eventuali shapefile 3D) ottenendo solo DXF 2D.

NB: con la QGIS 2.16 L’ESPORTAZIONE IN DXF  conserva la geometria, quindi se lo shapefile di partenza è 3D si otterrà un DXF 3D!!!

Salva con nome …

selezionando un layer nella TOC e con tasto desto del mouse selezioniamo ‘salva con nome’:

Immagine 6
Finestra di dialogo – salva con nome…

questa procedure, nativa di QGIS, utilizza GDAL quindi in output otterremo la stessa natura del file di ingresso: cioè se lo shapefile è 3D otterremo un DXF 3D.

Processing:

v.out.dxf

Immagine 8
Finestra di dialogo processing – v.out.dxf

questa procedura, avviata da processing, esporta lo shapefile sempre in 2D, ma è possibile sfruttare le altre caratteristiche del processing come l’iterazione e il bacth processing.

shell di OSGEO4W e OGR2OGR:

ogr2ogr -f "DXF" {outFile} {inFile} -zfield {ColumnWithZValue}

in questo caso anche se lo shapefile è 2D è possibile avere un output 3D se la tabella degli attributi dello shape contiene una colonna con valori di quota; per esempio se utilizzassimo il comando Raster => Estrazione => Curve di livello

Immagine 9
Finestra di dialogo – Curve di livello

tabella attributi:

Immagine 10
tabella attributi con campo ALTIT

Note finali: non avendo mai usato un Mac non saprei se è possibile usare la shell e quindi OGR2OGR. Per quanto riguarda il geo-algoritmo di GRASS v.out.dxf (Processing) per come è configurato non è possibile ottenere un output 3D, ma con opportune modifiche si potrebbe raggiungere lo scopo? da Grass Gis si!!!


 

25 pensieri su “QGIS: DXF 3D da shp (2D/3D)

  1. Ciao,
    io ho un file dwg dove è presente una CTR con curve di livello disegnate in 3D. Devo tirarne fuori una carta delle pendenze/acclività me non riesco a capire come fare. Mi sapresti dare una mano?

    "Mi piace"

    1. Ciao,
      esporta il dwg in dxf, poi lo importi in QGIS.
      Da QGIS->menu raster->interpolazione.
      cosi ottieni il dtm, per le pendenze menu raster->analisi geomorfologica->pendenza.

      ciao

      "Mi piace"

  2. Buonasera,
    sono architetto e neofita di QGIS, e avrei bisogno del vostro aiuto.
    Ho bisogno di convertire un file DTM della cartografia regionale toscana in un DXF 3D. Questo file poi lo importerei come terreno in ARCHLINE (parametrico tridimensionale) per generare un terreno.
    Ho Installato qgis, ed ho importato in qgis un file dtm della regione toscana (formato ASCII).
    Tramite raster-estrazione-curve di livello, ho flaggato nome attributo ed ho egnerato le curve di livello come contour linestring. selezionando le curve di livello nella finestra delle informazioni mi riporta la quota di altitudine. Ho anche installato qgis2threejs e con tale plugin posso vedere in explorer il terreno modellato in 3d. Quindi il file DTM a tutti gli effetti dovrebbe contenere la Z. A questo punto esporto in DXF, indico il nome file, simbologia simboli del vettore, codifica cp1252, SR selezionato, e nessuna spunta sulle tre opzioni in basso e clicco ok. Finita l’esportazione apro il file dxf con DWG trueview, mi appaiono le curve di livello, ma se ruoto la vista con l’orbita le curve di livello sono piatte. Ovvero ho esportato un file dxf 2d. Stesso risultato se importo il file dxf in archline tramite la procedure di formazione del terreno. Nessun terreno.
    Non riesco a capire se come poter esportare questo tipo di file DTM verso un DXF 3d. Potete aiutarmi.
    Questo è il link verso il portale della regione toscana da cui potete scaricare il file dtm:
    http://www502.regione.toscana.it/geoscopio/cartoteca.html
    Aperto il gis a dx aprire la tendina di morfologia sotto download, poi flaggare lidar, sulla mappa della regione appariranno rettangoli verdi e rossi. I rettangoli verdi sono della regione toscana, e quelli rossi del min. ambiente. Zommare su un rettangolo rosso (io ho provato questi), nella barra degli strumenti in alto prelevare la freccetta con il +verde, con la freccetta cliccare nel centro del rettangolo, si apre una finestra al cui interno ci sono i file DTM e DSM da scaricare liberamente.

    Grazie mille a tutti.
    Arcghigo

    "Mi piace"

    1. Ciao,
      come descritto nell’articolo dalla versione 2.16 con esporta in dxf è possibile esportare la geometria in 3D, ma la geometria deve essere 3D nel tuo caso è 2D. I valori che leggi sono nella tabella attributi e non nelle geometria.
      Come risolvere:
      1. utilizzando v.contour.step (da processing) crea curve di livello in 3D – come descritto in questo articolo: https://pigrecoinfinito.wordpress.com/2016/04/01/qgis-estrarre-curve-di-livello/
      2. trasformi le cirve di livello che hai estratto in 3D utilizzando la tabella attributi e v.to.3D sempre da processing.

      saluti

      "Mi piace"

  3. Buonasera Totò,
    ti ringrazio intanto della tua rapida risposta. Ho seguito il passaggio 1 ed ho estratto prima le curve di livello. Con il comando r.contour.step non riesco però a generare un layer shape. ovvero avvio r.contour.step, imposto 1 (m) su increment between countour levels, imposto il file di destinazione in contours, clicco RUN, lui fa tutti i calcoli, chiude la finestra automaticamente, ma poi a sx nel layer panel non c’è nessun shapefile generato. (stessa cosa nella cartella di destinazione). La fase due, non l’ho ancora provata.
    Non capisco dove sbaglio. ti ringrazio dell’aiuto.

    "Mi piace"

      1. ciao totò, ho installato la versione 3.0, e sono riuscito, solo con il comando raster-estrazione-curve di livello, ad estrarre le curve di livello 3d.
        Grazie mille ancora per l’aiuto.

        Piace a 1 persona

  4. Buongiorno Totò, desidero convertire non uno shape file in dwg ma l’intero contenuto di una composizione di stampa di qgisi mantendendo il formato di qunto rappresentato nella stessa composizione. è posiibile farlo in automatico? Grazie

    Piace a 1 persona

      1. Grazie per la rapida risposta.
        Si, l’avevo visto. Nel video viene esportato solo uno shape con le relative etichette. Se invece desidero esportare l’intero layout di stampa, così come è stato impopstato e magari stampato in pdf come faccio? graze ancora

        Piace a 1 persona

  5. Buonasera,
    scusate se ritorno sul tema ma non sono riuscito a risolvere ancora il mio problema, a causa del mio softaware.
    Ho bisogno di convertire un file DTM della cartografia regionale toscana in un DXF 3D. Ho necessità di esportare un file con i punti con la quota z. Questo file poi lo importerei come terreno in ARCHLINE (parametrico tridimensionale) per generare un terreno.
    Ho Installato qgis, ed ho importato in qgis un file dtm della regione toscana (formato ASCII) e riesco a visualizzarne il modello 3D sempre in qgis.
    Grazie alle indicazioni di Totò sono riuscito a esportare le curve di livello con quota z, ma Archline non legge questo formato con curve di levello quotate ma solo punti quotati.
    Ora mi pare di capire che il file DTM è una rielaborazione semplificata di un rilievo con nuvola di punti LIDAR, in cui si è approssimato il rilievo al mq raggruppando le quote altimetriche di questo mq in un unica quota media (immagino poi posta al centro). Quindi ogni pixel corrisponde ad 1 mq e ha una quota z.
    Quindi come faccio esportare la quota z di ogni pixel/mq come file dxf 3d, in modo da ottenere un file dxf di punti con maglia 1x1m e relative quote z?

    Spero di essere stato chiaro.
    E’ possibile?

    Potete aiutarmi.

    Questo è il link verso il portale della regione toscana da cui potete scaricare il file dtm:
    http://www502.regione.toscana.it/geoscopio/cartoteca.html
    Aperto il gis a dx aprire la tendina di morfologia sotto download, poi flaggare lidar, sulla mappa della regione appariranno rettangoli verdi e rossi. I rettangoli verdi sono della regione toscana, e quelli rossi del min. ambiente. Zommare su un rettangolo rosso (io ho provato questi), nella barra degli strumenti in alto prelevare la freccetta con il +verde, con la freccetta cliccare nel centro del rettangolo, si apre una finestra al cui interno ci sono i file DTM e DSM da scaricare liberamente.

    Grazie mille a tutti.
    Arcghigo

    Piace a 1 persona

    1. Ciao, se ti serve una nuola di punti 3D partendo dal file che scarichi dal Portale (DTM) potresti procedere in questo modo seguente:
      1. scarichi il DTM
      2. per la parte che ti interessa, crea vettore rettangolare;
      3. da strumenti di processing cerca ‘crea punti (centroid del pixel) dentro poligoni; otterrai dei punti 2D
      4. da strumenti di processing cerca ‘drape’ cosi crei i punti 3D

      se l’area è grande e usi il DTM 1 m/px occorrono enormi risorse hardware.

      ciao

      "Mi piace"

  6. Ciao Totò,
    ho fatto i seguenti passaggi:
    1-nuovo vettore temporaneo con multipolygon–incluso dimensione z
    2-dalla barra ho fatto aggiungi rettangolo ed ho disegnato un rettangolo dal bordo rosso puntinato che ho chiamato ” ritaglio”
    3-avviato ‘crea punti (centroid del pixel) –dentro poligoni scelto il file della mappa-scelto il vettore ritaglio–eseguito correttamente
    4-avviato v.drape: input da poligoni a punti–elevation raster..il file della mappa– avviato—-alla fine in rosso questo errore:
    “Caricamento layer
    I seguenti layers non sono stati caricati correttamente
    C:/Users/user/AppData/Local/Temp/processing_6f9d322ff6ba448c84b21fcda8f1201f/aee7e53d23d44fed909d2214961e19d2/output.shp”

    In v.drape ho provato varie opzioni ma sempre con lo stesso errore.

    Non sono per niente esperto, e non capisco l’errore.
    L’obiettivo finale è ottenere la mappa 3d da esportare in dxf composta da punti che hanno la quota z.
    Sai darmi indicazioni sulla procedura? dove sbaglio?
    Grazie mille a Totò e a chi vorrà aiutarmi.

    Piace a 1 persona

      1. Ciao Totò,
        Io ho la versione di qgis 3.10.11, ho estratto le curve di livello da un dtm 3d e provando a esportarle in .dxf accade che non visualizzo i valori di elevazione (asse Z). Controllando sulla tabella attributi del file dxf visualizzo diversi sub layer tranne che quello riferito alle quote. Cosa sto sbagliando?

        Piace a 1 persona

      2. Ciao,
        che algoritmo hai usato per estrarre le curve di livello??
        se interroghi in QGIS le curve di livello sono 3D??

        come esporti in dxf? che algoritmo usi???
        che sistema operativo usi??

        se puoi allega il tuo dtm

        "Mi piace"

      3. Ciao Toto’,
        non ho ancora risolto ed ho lo stesso problema di Geomax.
        IO utilizzo 3.6.0-Noosa, su windows 10 64 bit.
        Questo è il link verso il portale della regione toscana da cui ho scaricato il file dtm:
        http://www502.regione.toscana.it/geoscopio/cartoteca.html
        Aperto il gis a dx aprire la tendina di morfologia sotto download, poi flaggare lidar, sulla mappa della regione appariranno rettangoli verdi e rossi. I rettangoli verdi sono della regione toscana, e quelli rossi del min. ambiente. Zommare su un rettangolo rosso (io ho provato questi), nella barra degli strumenti in alto prelevare la freccetta con il +verde, con la freccetta cliccare nel centro del rettangolo, si apre una finestra al cui interno ci sono i file DTM e DSM da scaricare liberamente.

        Seguendo i tuoi consigli ho fatto i seguenti passagg in qgis:
        1-nuovo vettore temporaneo con multipolygon–incluso dimensione z
        2-dalla barra ho fatto aggiungi rettangolo ed ho disegnato un rettangolo dal bordo rosso puntinato che ho chiamato ” ritaglio”
        3-avviato ‘crea punti (centroid del pixel) –dentro poligoni scelto il file della mappa-scelto il vettore ritaglio–eseguito correttamente
        4-avviato v.drape: input da poligoni a punti–elevation raster..il file della mappa– avviato—-alla fine in rosso questo errore:
        “Caricamento layer
        I seguenti layers non sono stati caricati correttamente
        C:/Users/user/AppData/Local/Temp/processing_6f9d322ff6ba448c84b21fcda8f1201f/aee7e53d23d44fed909d2214961e19d2/output.shp”

        In v.drape ho provato varie opzioni ma sempre con lo stesso errore.

        Non sono per niente esperto, e non capisco l’errore.
        L’obiettivo finale è ottenere la mappa 3d da esportare in dxf composta da punti che hanno la quota z.

        Grazie mille a tutti.
        Arcghigo

        Piace a 1 persona

  7. Ciao Totò, intanto volevo ringraziarti per il contributo che dai al mondo qgis con tutti gli esempi che ci dai e con la tua disponibilità. In pratica interrogando le curve di livello, come indicato a te, mi sono reso conto che mancava il valore (z). Di fatto avevo estratto le curve di livello da un dtm 2D e non da uno 3D. Rifacendo le operazioni di estrazione delle curve di livello dal dtm 3D attraverso Raster – Estrazione – Curve di livello e salvataggio delle stesse come shp file e selezionando con il tasto dx il layer curve di livello – Esporta – Salva elementi come e successivo salvataggio in dxf., è risultato tutto ok. Grazie ancora

    Piace a 1 persona

  8. Ciao Totó, volevo ringraziarti per il contributo che dai al mondo qgis con i tuoi video e le tue spiegazioni. Ho estrapolato le curve di livello attraverso Raster => Estrazione=> Curve di livello, salvataggio come shp file, e interrogandole, come suggerito da te, mi sono reso conto che il dtm usato era 2D perché mancava il valore delle z. Ho estrapolato le curve di livello dal dtm 3D, le ho interrogate per vedere se erano riportate le quote su Z, successivamente dalla finestra layer ho selezionato curve di livello con il tasto dx e poi Esporta=>”Salva file come” e infine salvataggio file dxf. Ho verificato le nuove curve di livello 3D dxf sia su qgis che in cad e risultano le quote sull’asse Z. Grazie ancora

    Piace a 1 persona

  9. Ciao Totò, grazie per il tutorial!
    Ho importato il DTM della mia provincia, generato le curve di livello e sono pronta per esportarle in dxf in 3d.
    Siccome però il tutto, esportato in dxf, pesa molto, volevo chiedere se è possibile esportare “parzialmente”, cioè, in qualche maniera, selezionare solo una determinata area per l’esportazione?
    Grazie!

    "Mi piace"

Lascia un commento

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