GRASS, QGIS | individuare collina e pianura di un territorio

Un collega mi ha chiesto di indicargli le percentuali di territorio (comunale) pianeggiante e collinare.

Avevo a disposizione un DEM con risoluzione 5m (realizzato con GRASS a partire dalle curve di livello della CTRN) ed il vettoriale del limite amministrativo.Tuttavia il DEM (chiamato dem_5m) ricopre un’area pressochè rettangolare ben più ampia del limite del comune ed avevo la necessità di “clipparlo” sul boundary di interesse. Ho agito per passi successivi utilizzando GRASS dall’interno di QGIS.

L’immagine sottostante illustra la situazione di partenza (dem e confine):

dtm e confine

dtm a 5 m e confine comunale

Ecco i passi seguiti:

– conversione del vettoriale del confine comunale in raster:

$ v.to.rast input=confine_comune out=confine_comune (comando lanciato dalla shell del plugin qgis grass)

– impostazione della regione di lavoro sul raster appena creato:

$ g.region rast=confine_comune res=5

– creazione di una MASK dal confine per clippare il dem su di esso in un secondo momento:

$ r.mask input=confine_comune

– clip del dem per delimitarlo al territorio comunale (con r.mapcalc); si ottiene un raster che chiameremo “dem_comune”:

$ r.mapcalc “dem_comune=dtm_5m – confine_comune”

– calcolo del territorio considerato collinare (da una stima si è deciso di considerare tale il territorio con quota > 120 m s.l.m. in quanto rappresenta la quota media del piede di collina dell’area di lavoro):

$ r.mapcalc “collina=dem_comune>120”

– e calcolo della pianura con il territorio che rimane a complemento:

$ r.mapcalc “pianura=dem_comune<=120”

Il risultato è il seguente:

i raster "collina" e "pianura" caricati con trasparenza al 50%

i raster “collina” e “pianura” caricati con trasparenza al 50%

Il passaggio succesivo consiste nel trasformare i raster in vettori mediante il modulo “r.to.vect“. Il calcolo della superficie e, di conseguenza, l’incidenza percentuale delle due porizioni di territorio sul totale vengono tralasciati (basta consultare le aree con lo strumento di interrogazione di QGIS o lanciare il modulo “v.report” in GRASS).

GRASS | il modulo v.distance

Dati due vettori in GRASS, uno lineare (rete dell’acquedotto) ed uno puntuale (localizzazione degli idranti) mi si era posto il problema di “travasare” un dato relativo alle tratte di acquedotto (nel caso particolare il diametro della condotta) nella tabella attributi degli idranti. Lo scopo era quello di conoscere il diametro della tratta che forniva ogni idrante.

Spulciando tra i moduli di GRASS (grandissimo GRASS! :-)) ho trovato v.distance. Questo modulo consente di trovare gli oggetti che si trovano ad una certa distanza (in base ad una threeshold impostata) da una serie di oggetti puntuali; inoltre permette di salvare attributi degli oggetti più vicini “agganciandoli” aquelli sorgente.

Ecco un dettaglio dei dati che avevo a disposizione:

– un vettore lineare chiamato “rete_acqua” con una serie di attributi tra cui il diametro della tratta (colonna chiamata “diametro“);

– un vettore puntuale chiamato “idranti” con una serie di attributi ai quali voglio aggiungere un ulteriore dato relativo al diametro della condotta; per memorizzare questo attributo ho creato una nuova colonna “sezione_co“;

– il comando in GRASS per ottenere il risultato voluto e’:

v.distance from=idranti to=rete_acqua upload=to_attr to_column=diametro column=sezione_co out=v_distance_idranti_rete

Consultando la tabella attributi del vettore “idranti” vediamo che la colonna “sezione_co” e’ stata aggiornata con i valori di “diametro” della tratta di acquedotto piu’ vicina.

da google maps a………………qgis

Un amico mi ha postato il link ad una “sua” mappa creata in gmaps nella quale ha inserito alcuni punti per i propri scopi.
Mi ha chiesto se era possibile recuperare i dati geo-localizzati in quella mappa (salvarli in formato digeribile da un gis) per effettaure ulteriori elaborazioni.
Ho scoperto (googolando un pochino) che sono sufficienti pochi passaggi per ottenere i “propri” dati in formato KML.
Procedere some segue:

– aprire il link della mappa;
– click con tasto dx su “Visualizza in google earth” -> copy link to the clipboard
– incollare sulla barra degli indirizzi sostituendo il pezzo di stringa [output=nl] con [output=kml].
– dare invio: viene chiesto di salvare il file in formato .kml
– aprire il file con qgis.

A questo punto si può salvare in SHP, importare in Posgis, Grass e fare le opportune elaborazioni.

ps2pdf per stampa di cartografia

Il modulo ps.map di GRASS produce un file postscript che può essere convertito in PDF mediante il tool “ps2pdf“.
E’ possibile impostare la risoluzione (che influisce sulla risoluzione dei fonts e dei pattern dei retini).
Vengono riportati alcuni comandi utilizzati per la creazione di un PDF da inviare ad una tipografia per la stampa in alta qualità.
$ ps2pdf -dPDFSETTINGS=/prepress -r1200 -dProcessColorModel=/DeviceCMYK nome_file.ps nonme_file.pdf
Il parametro “r1200” imposta la risoluzione a 1200 dpi; il “DeviceCMYK” dovrebbe settare l’output in quadricromia CMYK (come richiesto dalla tipografia in sede di stampa) anzichè in tricromia RGB come settato di default dal modulo ps.map di GRASS, ma sembra non funzionare.

tabella colori di un DEM in GRASS

La tabella colori di un raster GRASS può essere modificata mediante il modulo r.colors.
E’ possibile scegliere fra un elenco di colori preimpostati oppure possono essere personalizzati: creare un file “rules.file” e indicare i range (in %) con la codifica RGB. Poi eseguire il comando:
$ cat /percorso/al/file/rules.file | r.colors map=nome_dem color=rules

Esempio di rules.file:
0% 0 230 0
20% 0 160 0
35% 50 130 0
55% 120 100 30
75% 120 130 40
90% 170 160 50
100% 255 255 100

ps.map in GRASS

ps.map è il modulo che consente di produrre un file postscript pronto per la stampa.

Per creare una mappa tematica (colorare in maniera diversa elementi vettoriali in base al valore di un certo campo) è necessario usare più volte (come il CLASSITEM in Mapserver) il comando “vlines” (nel caso di elementi lineari) o “vareas” (nel caso di elementi poligonali). Esempio:

vlines nome_vettore

color 0:0:0

where nome_campo =”valore”

width 0.25

end

e così via per ogni valore del campo.

Il comando per lanciare “ps.map” è:

$ ps.map input=/nome/file/psmap.txt output=/nome/file/psmap.ps