QGIS: ESTRARRE CURVE DI LIVELLO

In questo breve articolo vedremo due approcci differenti per estrarre le curve di livello da un DTM (Modello digitale del terreno), in un primo caso estrarremo semplici curve di livello in 2D (cioè la quota sarà solo un attributo e non una geometria) e nel secondo caso la Z (quota) sarà anche nella geometria (curve di livello 3D).

importiamo un DTM in QGIS:

Immagine 5
DTM

dal menù Raster => Estrazione => Curve di livello …

Immagine 6
finestra di dialogo Curve di livello (2D)

con questa procedura si estraggono curve di livello (in 2D) con la possibilità di creare un attributo elevazione:

Immagine 7
Curve di livello e tabella attributi

Utilizziamo ora il processing di QGIS:

cerchiamo l’algoritmo di GRASS GIS r.contour.step

Immagine 9
Processing – QGIS

doppio clic e si aprirà una finestra di dialogo:

Immagine 10
finestra di dialogo – r.contour.step

otterremo:

Immagine 11
curve livello 3D

 

Immagine 12
Vista 3D – SAGA GIS

 

 

Buon lavoro!!!

Advertisements

21 pensieri su “QGIS: ESTRARRE CURVE DI LIVELLO

  1. Salve Totó stavo seguendo il tuo post per estrarre delle curve di livello 3D da DEM per poi esportarle in DXF, purtroppo non ho capito e non riesco a mantenere il valore z delle curve nell’esportazione, il file in DXF mi risulta quindi piatto, sapresti darmi alcuni consigli su come concludere con successo il procedimento?

    Grazie

    Liked by 1 persona

  2. Dopo che hai estratto le curve di livello con ‘r.contour.step’ otterrai uno shapefile 3D; per esportarlo in DXF puoi seguire due strade:
    1. da Progetto => Esportazione DXF …, questa procedura (nativa in QGIS) appiattisce sempre tutti gli shapefile;
    2. tasto destro sul layer ‘curve di livello’ => ‘salva con nome’ e selezioni come formato DXF; questa procedura usa il metodo ‘OGR’ quindi esporta le geometrie senza modificarle, quindi otterrai un DXF 3D.
    Spero di essere stato chiaro.
    Saluti!!!

    Mi piace

  3. Salve, ho seguito questo tutorial per estrarre delle curve di livello da un DTM5. Le curve sono veramente molto dettagliate. Se le esporto in dxf (mi servono per lavorare con il Cad), risultano ingestibili. Esiste un modo per approssimare queste curve in qgis, rendendole meno dettagliate?
    Andrea

    Mi piace

    1. Ciao, per alleggerire lo shapefile puoi semplificare la geometria cioè diminuire sensibilmente il numero di vertici (ma perderai in precisione):
      menù Vettore => Strumenti di geometria => Semplifica geometria
      varia il parametro di semplificazione per esempio mettendo 1, noterai che il file diventerà molto più leggero.

      Saluti

      Mi piace

  4. Ciao, innanzi tutto complimenti per il sito e per i tutorial, veramente esaustivi. Premetto che non sono un’esperto di qgis, ultimamente mi ci sto dedicando con la speranza di acquisire buona manualità sopratutto per il lavoro. Nella mia ricerca su internet per un problema che non riuscivo a risolvere mi ha portato su questa pagina, ho seguito il tutorial sull’estrazione delle curve di livello dai DTM molto simile a quello che cercavo, nel mio caso mi interesserebbe sapere come si possono estrarre i punti quotati da un DTM con passo 1m, credo che la procedura sia la stessa ma non riesco proprio a cavarne piede. Grazie in anticipo per l’aiuto che potrai darmi. Pierluigi

    Mi piace

    1. Ciao Pierluigi,
      per risponderti in modo esaustivo devo capire bene cosa chiedi; intanto parlare di curve di livello o punti quotati non vi è molta differenza in quanto le curve sono un insieme di punti alla stessa quota;
      quindi basta configurare r.contour.step con passo 1 m e successivamente usare l’algoritmo ‘estrai vertici’; cosi facendo otterrai un layer di soli punti quotati.

      Se invece partissi da un layer di punti e vuoi associare la quota puoi usare il plugin ‘Point sampling tool’, naturalmente devi avere un DTM!!!

      spero di esserti stato utile.

      Mi piace

  5. Ciao, ma se volessi estrarre curve di livello da una quota 0 da me stabilita con incremento progressivo visto che si tratta di una strada in leggera salita come devo fare?

    Mi piace

    1. Puoi definire la tua quota di inizio contorno solo con il r.contour.step sostituendo lo ‘0’ con il tuo valore di partenza nel campo minimum contour level;
      oppure ritagli il DTM in modo da contenere solo la strada.

      Mi piace

      1. ho risolto cosi, ho inserito il valore minimo nel mio caso -35 nel contour level, una volta inserite le etichette sono andato su proprietà -> campi -> elevation -> calcolatore campi ho selezionato il valore “elevation” (doppio Click) e inserito nel calcolare “ID elevetion” + 35 ( nel mio caso interessava che la quota – 35 fosse la quota 0) in automatico il calcolatore ha calcolato tutte le quote progressive con +35 cambiando la quota di riferimento

        Mi piace

  6. Buongiorno sto provando ad estrarre le curve in formato 3d attraverso il comando r.contour.step, ma durante il processo si blocca e da il seguente errore:

    The following layers were not correctly generated.
    Contours
    You can check the log messages to find more information about the execution of the algorithm

    Mi piace

  7. Buongiorno,
    probabilmente sono sull’argomento sbagliato ma avrei bisogno di un aiuto.
    Ho un DTM di maglia 2m, ma vorrei modificarlo/ricrearlo con una maglia più grande (10m) poichè il livello di precisione è piuttosto basso e, soprattutto, l’area molto estesa quindi il programma ci mette un’eternità a girare. Ho provato (come scritto sulla guida di QGIS) a creare curve di livello e punti quotati con maglia 10 e successivamente a fare un’interpolazione triangolare (TIN) attraverso raster –> interpolazione, ma il programma mi si blocca ogni volta che provo a fare questa operazione. C’è mica un altro modo per creare o modificare la maglia del DTM?

    Ringrazio in anticipo per l’attenzione.
    Simona.

    Mi piace

    1. Ciao,
      potresti provare questa procedura:
      Proprietà => Salva con nome; tra le varie opzioni trovi ‘Risoluzione’; scrivi 10 sia in orizzontale che verticale;
      avrai il tuo DTM in poco tempo. 😉

      Mi piace

  8. ciao ti faccio una domanda: ho estratto un TIN dalle curve di livello. poi ho una base senza elevazione contente strade in shp. vorrei inserire l’elevazione del TIN dentro il dbf dello sdh strade. come posso fare?

    Mi piace

    1. Per trasferire la terza dimensione ad uno shapefile (2D) in termini di geometria, quindi avere per ogni vertice la x,y e z potresti usare GRASS GIS (che è già installato in QGIS) tramite il processing e l’algoritmo ‘v.drape’; ti serve un DTM che contiene le quote; successivamente puoi popolare (dopo aver creato tre campi nuovi,x,y,z ) il dbf usando il calcolatore di campi e le seguenti formule:
      per i lcampo x: $x
      per il campo y: $y
      per la z: z($geometry)

      ciao

      Mi piace

  9. Buon giorno, ho provato ad estrarre le curve di livello3D seguendo il tutorial ma ecco cosa mi dice il log message:

    Avvio dell’algoritmo r.contour.step – Create vector contours from raster at specified steps…
    g.proj -c proj4=”+proj=longlat +datum=WGS84 +no_defs”
    r.external input=”C:\Users\feded\Documents\Lavoro\Progetti\Smalzi Franco\DTM\dtm000171.tif” band=1 output=tmp14930275790411 –overwrite -o
    g.region n=5142010.0 s=5139990.0 e=640010.0 w=637990.0 res=1.0
    r.contour input=”tmp14930275790411″ minlevel=”0″ maxlevel=”10000″ step=”5″ cut=”0″ output=outputbf929147a93941269529e8b90d4140c1 –overwrite
    v.out.ogr -s -e input=outputbf929147a93941269529e8b90d4140c1 type=auto output=”C:/Users/feded/Documents/Lavoro/Progetti/Smalzi Franco/DTM” format=ESRI_Shapefile output_layer=3d_curve_5m –overwrite

    C:\PROGRA~1\QGIS2~1.18\bin>set HOME=C:\Users\feded

    C:\PROGRA~1\QGIS2~1.18\bin>set GISRC=C:\Users\feded\.qgis2\\processing\processing.gisrc7

    C:\PROGRA~1\QGIS2~1.18\bin>set WINGISBASE=C:\PROGRA~1\QGIS2~1.18\apps\grass\grass-7.2.0

    C:\PROGRA~1\QGIS2~1.18\bin>set GISBASE=C:\PROGRA~1\QGIS2~1.18\apps\grass\grass-7.2.0

    C:\PROGRA~1\QGIS2~1.18\bin>set GRASS_PROJSHARE=C:\PROGRA~1\QGIS2~1.18\apps\grass\grass-7.2.0\share\proj

    C:\PROGRA~1\QGIS2~1.18\bin>set GRASS_MESSAGE_FORMAT=plain

    C:\PROGRA~1\QGIS2~1.18\bin>if “” == “” set PATH=C:\PROGRA~1\QGIS2~1.18\apps\grass\grass-7.2.0\bin;C:\PROGRA~1\QGIS2~1.18\apps\grass\grass-7.2.0\lib;C:\PROGRA~1\QGIS2~1.18\apps\Python27\lib\site-packages\Shapely-1.2.18-py2.7-win-amd64.egg\shapely\DLLs;C:\PROGRA~1\QGIS2~1.18\apps\Python27\DLLs;C:\PROGRA~1\QGIS2~1.18\apps\qgis\bin;C:\PROGRA~1\QGIS2~1.18\apps\Python27\Scripts;C:\PROGRA~1\QGIS2~1.18\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\WBem

    C:\PROGRA~1\QGIS2~1.18\bin>if not “” == “” set PATH=C:\PROGRA~1\QGIS2~1.18\apps\grass\grass-7.2.0\bin;C:\PROGRA~1\QGIS2~1.18\apps\grass\grass-7.2.0\lib;;C:\PROGRA~1\QGIS2~1.18\apps\grass\grass-7.2.0\bin;C:\PROGRA~1\QGIS2~1.18\apps\grass\grass-7.2.0\lib;C:\PROGRA~1\QGIS2~1.18\apps\Python27\lib\site-packages\Shapely-1.2.18-py2.7-win-amd64.egg\shapely\DLLs;C:\PROGRA~1\QGIS2~1.18\apps\Python27\DLLs;C:\PROGRA~1\QGIS2~1.18\apps\qgis\bin;C:\PROGRA~1\QGIS2~1.18\apps\Python27\Scripts;C:\PROGRA~1\QGIS2~1.18\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\WBem

    C:\PROGRA~1\QGIS2~1.18\bin>set GRASS_VERSION=7.2.0

    C:\PROGRA~1\QGIS2~1.18\bin>if not “” == “” goto langset

    C:\PROGRA~1\QGIS2~1.18\bin>FOR /F “usebackq delims==” %i IN (`”C:\PROGRA~1\QGIS2~1.18\apps\grass\grass-7.2.0\etc\winlocale”`) DO @set LANG=%i

    C:\PROGRA~1\QGIS2~1.18\bin>set PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.PY

    C:\PROGRA~1\QGIS2~1.18\bin>set PYTHONPATH=;C:\PROGRA~1\QGIS2~1.18\apps\grass\grass-7.2.0\etc\python;C:\PROGRA~1\QGIS2~1.18\apps\grass\grass-7.2.0\etc\wxpython\n

    C:\PROGRA~1\QGIS2~1.18\bin>g.gisenv.exe set=”MAPSET=PERMANENT”

    C:\PROGRA~1\QGIS2~1.18\bin>g.gisenv.exe set=”LOCATION=temp_location”

    C:\PROGRA~1\QGIS2~1.18\bin>g.gisenv.exe set=”LOCATION_NAME=temp_location”

    C:\PROGRA~1\QGIS2~1.18\bin>g.gisenv.exe set=”GISDBASE=C:\Users\feded\AppData\Local\Temp\processinga92e796ac86f433daff9fc06c35e4c4c\grassdata”

    C:\PROGRA~1\QGIS2~1.18\bin>g.gisenv.exe set=”GRASS_GUI=text”

    C:\PROGRA~1\QGIS2~1.18\bin>g.proj -c proj4=”+proj=longlat +datum=WGS84 +no_defs”
    Default region was updated to the new projection, but if you have multiple mapsets `g.region -d` should be run in each to update the region from the default
    Informazioni sulla proiezione aggiornate

    C:\PROGRA~1\QGIS2~1.18\bin>r.external input=”C:\Users\feded\Documents\Lavoro\Progetti\Smalzi Franco\DTM\dtm000171.tif” band=1 output=tmp14930275790411 –overwrite -o
    ATTENZIONE: La verifica della proiezione verrà ignorata
    ERRORE: Valore di latitudine Nord non valido

    C:\PROGRA~1\QGIS2~1.18\bin>g.region n=5142010.0 s=5139990.0 e=640010.0 w=637990.0 res=1.0
    ERRORE: Input non valido

    C:\PROGRA~1\QGIS2~1.18\bin>r.contour input=”tmp14930275790411″ minlevel=”0″ maxlevel=”10000″ step=”5″ cut=”0″ output=outputbf929147a93941269529e8b90d4140c1 –overwrite
    ERRORE: Raster non trovato

    C:\PROGRA~1\QGIS2~1.18\bin>v.out.ogr -s -e input=outputbf929147a93941269529e8b90d4140c1 type=auto output=”C:/Users/feded/Documents/Lavoro/Progetti/Smalzi Franco/DTM” format=ESRI_Shapefile output_layer=3d_curve_5m –overwrite
    ERRORE: Vettoriale non trovato

    C:\PROGRA~1\QGIS2~1.18\bin>exit
    Converting outputs
    Caricamento layer

    The following layers were not correctly generated.
    Contours
    You can check the log messages to find more information about the execution of the algorithm

    Che cosa devo fare?!?
    Grazie!

    Mi piace

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...