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

 

Donate:

 

 

 

 

Buon lavoro!!!

Annunci

31 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

  10. Salve, forse l’argomento non è attinente con questa sezione ma lo espongo ugualmente, lavorando su un vettoriale CTR al 10000 e con i DTM oramai ho acquisito dimistichezza, però ho notato una cosa, quando vado a inserire il plugin di Google Maps da Web>openLayersPlugin>Google Maps>Google Satellite la sovrapposizione non avviene correttamente, il satellite e il CTR al 10000 come pure il DTM sono sfasati e come effettuo lo zoom la cosa si amplifica. Mi sapete dire il perché? Grazie

    Mi piace

  11. Il Plugin OpenLayer ormai non è più sviluppato e quindi lo shift è noto da tempo; prova ad usare il plugin QuickMapsSercices; poi da setting -> more services aggiungi le altre mappe (google, bing ecc..)
    ciao

    Mi piace

  12. Ciao, ho un dsm con pixel di 3cm circa come posso evitare che le contours create da questa base intersechino alcuni file vettoriali lineari (es: strade) o poligonali (es:aree di rispetto) da me creati ?
    Se parto da punti quotati e creo un dtm con lo strumento interpolazione ho la possibilità di distinguere aree di restrizione, ecc. caricando i vari layer e specificandoli, ma se invece ho già il DTM/DSM ? Grazie mille!

    Mi piace

    1. Ciao, la prima cosa che mi viene in mente è di estrarre dal DTM/DSM i punti e successivamente fare l’interpolazione.
      Per estrarre i punti dal raster potresti usare la ‘conversione di formato’ e salvare l’output in ASCII Gridded XYZ.
      Non ho mai avuto questa esigenza quindi non ho mai fatto prove!!!

      Mi piace

  13. Ciao, e complimenti per questo sito.
    Pongo questo problema nella speranza che qualcuno mi possa dare una mano:
    Tramite il sito del Geoportale nazionale ho convertito il Lidar regione Lazio WMS (solo una parte) in file rester (TIF) al fine successivo di ricavare dal raster le curve di livello.
    Nelle proprietà dei TIF però non ritrovo più l’informazione corretta della quota (che invece interrogando il geoportale appare correttamente) ma trovo invece informazioni su 4 bande di colore. Estraendo le curve dai tali tif le info sulle quote sono per forza di cose errate.
    C’è un modo per recuperare la info quota giusta?
    Grazie

    Andrea

    Mi piace

    1. A differenza di un WMS, che restituisce i dati territoriali come mappe statiche (rappresentate direttamente come immagini dal server), il WCS rende disponibili dati territoriali insieme con i loro attributi che possono essere interpretati, analizzati, elaborati, ecc.

      Mi piace

  14. Ciao Totò , Grazie mille per il tutorial, anch’io provando ad estrarre le curve 3d da dem sono incappato nello stesso errore di FEDE. Ho provato a cambiare epsg ma senza successo. cosa può essere secondo te? Grazie mille

    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...