advertisement

Be groovy with JGrass

25 %
75 %
advertisement
Information about Be groovy with JGrass
Technology

Published on November 20, 2008

Author: moovida

Source: slideshare.net

Description

Presentation done about scripting with the JGrass console.

The presentation is in Italian, but there are many code snippets, so it could be easy to understand for anyone.
advertisement

PROVINCIA AUTONOMA DI TRENTO Servizo Bacini Montani Be Groovy with JGrass TRENTO, 20 Novembre 2008

EDITOR DI SCRIPTING DI JGRASS

EDITOR DI SCRIPTING DI JGRASS Per configurare l'ambiente di scripting è necessario personalizzare l'intestazione del file con il percorso al MAPSET di calcolo ed all'installazione dei comandi di GRASS. MAPSET e GISBASE sono le uniche variabili necessarie e devono essere decommentate da //# MAPSET = ... //# GISBASE = ... a # MAPSET = ... # GISBASE = ...

EDITOR DI SCRIPTING DI JGRASS # MAPSET= ... # GISBASE = ...

EDITOR DI SCRIPTING DI JGRASS Il file di scripting di default di JGrass viene creato nella home dell'utente ed è chiamato default.jgrass e viene salvato automaticamente, è anche possibile personalizzare il nome del file. Nell'ambiente di scripting è possibile eseguire i comandi di JGrass e di GRASS ed utilizzare un linguaggio di programmazione completo come Groovy o Beanshell per automatizzare le procedure.

EDITOR DI SCRIPTING DI JGRASS comandi di JGrass devono essere preceduti dalla scritta: jgrass oppure inseriti in jgrass { comando } comandi di GRASS devono essere preceduti dalla scritta: grass oppure inseriti in grass { comando } quando si digita un comando, all'inserimento del punto, l'editor fornisce un elenco di possibili completamenti del comando basandosi sulla parte già inserita. I comandi sono suddivisi secondo la logica di GRASS in r. comandi che si riferiscono a mappe raster h. comandi di idro-geomorfologia (horton) rv. comandi di interazione raster-vettoriali

comandi di JGrass devono essere preceduti dalla scritta:

jgrass oppure inseriti in jgrass { comando }

comandi di GRASS devono essere preceduti dalla scritta:

grass oppure inseriti in grass { comando }

quando si digita un comando, all'inserimento del punto, l'editor fornisce un elenco di possibili completamenti del comando basandosi sulla parte già inserita. I comandi sono suddivisi secondo la logica di GRASS in

r. comandi che si riferiscono a mappe raster

h. comandi di idro-geomorfologia (horton)

rv. comandi di interazione raster-vettoriali

EDITOR DI SCRIPTING DI JGRASS per avere la descrizione e la usage dei comandi si deve digitare il comando seguito dalla stringa --help l'help dei comandi viene visualizzato nella finestra della Console che si apre automaticamente nella parte in basso a lato del Catalogo

per avere la descrizione e la usage dei comandi si deve digitare il comando seguito dalla stringa

--help

l'help dei comandi viene visualizzato nella finestra della Console che si apre automaticamente nella parte in basso a lato del Catalogo

EDITOR DI SCRIPTING DI JGRASS per avere la descrizione e la usage dei comandi si deve digitare il comando seguito dalla stringa --help l'help dei comandi viene visualizzato nella finestra della Console che si apre automaticamente nella parte in basso a lato del Catalogo per eseguire un comando è necessario selezionare le righe che si vogliono eseguire nell'editor e poi con il tasto destro scegliere Run “default.jgrass” ogni messaggio di errore viene messo in rosso nella finestra della Console

per avere la descrizione e la usage dei comandi si deve digitare il comando seguito dalla stringa

--help

l'help dei comandi viene visualizzato nella finestra della Console che si apre automaticamente nella parte in basso a lato del Catalogo

per eseguire un comando è necessario selezionare le righe che si vogliono eseguire nell'editor e poi con il tasto destro scegliere

Run “default.jgrass”

ogni messaggio di errore viene messo in rosso nella finestra della Console

EDITOR DI SCRIPTING DI JGRASS

EDITOR DI SCRIPTING DI JGRASS

EDITOR DI SCRIPTING DI JGRASS l'editor di scripting è pensato per costituire un archivio delle operazioni fatte dall'utente il file salvato si può scambiare tra utenti diversi che possono così ripetere le operazioni nella stessa sequenza e con le stesse mappe utilizzare lo scripting non solo velocizza le operazioni al momento di calcolo, ma soprattutto permette la replicabilità delle stesse operazioni per applicazioni future con lo scripting si possono eseguire comandi in sequenza e così preparare i dati per la modellazione senza che l'utente debba continuamente interagire con il programma

l'editor di scripting è pensato per costituire un archivio delle operazioni fatte dall'utente

il file salvato si può scambiare tra utenti diversi che possono così ripetere le operazioni nella stessa sequenza e con le stesse mappe

utilizzare lo scripting non solo velocizza le operazioni al momento di calcolo, ma soprattutto permette la replicabilità delle stesse operazioni per applicazioni future

con lo scripting si possono eseguire comandi in sequenza e così preparare i dati per la modellazione senza che l'utente debba continuamente interagire con il programma

IMPORT DEI DATI IN JGRASS importante nel caso di bacini di medio-grandi dimensioni è la possibilità di automatizzare la procedura di importazione e di creazione del DTM del bacino nello scripting è possibile integrare anche operazioni di lettura e di listing di files e cartelle nello scripting si possono utilizzare anche cicli (for, while...) e variabili in generale (vettori, matrici... di numeri interi, double, stringhe...)

importante nel caso di bacini di medio-grandi dimensioni è la possibilità di automatizzare la procedura di importazione e di creazione del DTM del bacino

nello scripting è possibile integrare anche operazioni di lettura e di listing di files e cartelle

nello scripting si possono utilizzare anche cicli (for, while...) e variabili in generale (vettori, matrici... di numeri interi, double, stringhe...)

IMPORT DEI DATI IN JGRASS Esempio di importazione dei dati del Cismon: relativamente al bacino del Cismon vengono fornite due diverse cartelle di dati una per i fogli con risoluzione 2x2m e l'altra con i fogli a risoluzione 1x1m per l'esempio trattato si sono copiati in una cartella i tre file dtm000358_WGS.zip, 000359, 000360 i dati devono essere scompattati nella cartella per essere accessibili da JGrass si può scrivere uno script che importi tutti i files che sono in una cartella usiamo il linguaggio Groovy per lo scripting

Esempio di importazione dei dati del Cismon:

relativamente al bacino del Cismon vengono fornite due diverse cartelle di dati una per i fogli con risoluzione 2x2m e l'altra con i fogli a risoluzione 1x1m

per l'esempio trattato si sono copiati in una cartella i tre file dtm000358_WGS.zip, 000359, 000360

i dati devono essere scompattati nella cartella per essere accessibili da JGrass

si può scrivere uno script che importi tutti i files che sono in una cartella

usiamo il linguaggio Groovy per lo scripting

IMPORT DEI DATI IN JGRASS Definiamo una variabile che contenga il percorso alla cartella contenente i file compressi e quelli scompattati. Sia fa notare l'impostazione di MAPSET e GISBASE: # MAPSET = /home/moovida/TMP/testlocation/testmapset/ # GISBASE = /usr/lib/grass/ def cartellaFileZippati = new File("/home/moovida/data/1x1zip")

IMPORT DEI DATI IN JGRASS Controlliamo il contenuto della cartella: cartellaFileZippati.eachFile{ file -> println file } Il risultato: /home/moovida/data/1x1zip/dtm000358_WGS.zip /home/moovida/data/1x1zip/dtm000359_WGS.zip /home/moovida/data/1x1zip/dtm000360_WGS.zip /home/moovida/data/1x1zip/dtm000358_WGS.ASC /home/moovida/data/1x1zip/dtm000359_WGS.ASC /home/moovida/data/1x1zip/dtm000360_WGS.ASC Total run time: 2765 ms

IMPORT DEI DATI IN JGRASS Modifichiamo il ciclo sui file per elencare solo i file che ci interessano: cartellaFileZippati.eachFile{ file -> if ( file.name.endsWith("ASC") ) println file } Il risultato: /home/moovida/data/1x1zip/dtm000358_WGS.ASC /home/moovida/data/1x1zip/dtm000359_WGS.ASC /home/moovida/data/1x1zip/dtm000360_WGS.ASC Total run time: 937 ms

IMPORT DEI DATI IN JGRASS Creiamo una lista dei file che ci interessano, in modo da poterla usare dopo: // creo una lista vuota def listFile = []; // la popolo con i percorsi dei file che voglio importare cartellaFileZippati.eachFile{ file -> if ( file.name.endsWith(&quot;ASC&quot;)) { listFile << file.absolutePath } }

IMPORT DEI DATI IN JGRASS Ancora una volta controlliamo se la lista è stata correttamente popolata: listFile.each{ percorso -> println percorso } Il risultato: /home/moovida/data/1x1zip/dtm000358_WGS.ASC /home/moovida/data/1x1zip/dtm000359_WGS.ASC /home/moovida/data/1x1zip/dtm000360_WGS.ASC

IMPORT DEI DATI IN JGRASS Adesso proviamo a estrarre dal nome del file il nome che vogliamo dare alla mappa importata. Ad esempio possiamo rimuovere la parte finale: _WGS.ASC // creiamo una lista vuota per i nomi delle mappe importate def listFile = [] def listNames = [] cartellaFileZippati.eachFile{ file -> if ( file.name.endsWith(&quot;ASC&quot;)) { listFile << file.absolutePath listNames << file.name.replaceFirst(&quot;_WGS.ASC&quot;,&quot;&quot;) } }

IMPORT DEI DATI IN JGRASS Controlliamo se la lista è stata correttamente popolata: listNames.each{ nome -> println nome } Il risultato: dtm000358 dtm000359 dtm000360

IMPORT DEI DATI IN JGRASS Ora che abbiamo una lista con i percorsi delle mappe da importare e una lista dei nomi delle mappe importate, dobbiamo capire come fare un ciclo che processi entrambe le variabili. In groovy i cicli possono essere scritti usando la seguente sintassi: (0..5).each{ i -> println i } secondo la quale vengono stampate in output 6 righe riportanti l'indice del ciclo, da 0 a 5: 0, 1, 2, 3, 4, 5

IMPORT DEI DATI IN JGRASS Siamo pronti a tentare di applicare la sintassi appena vista al nostro caso: // chiediamo alla lista il numero di valori contenuti def numeroMappe = listFile.size // eseguiamo un ciclo stampando in contemporanea sia percorsi che nomi mappe (0..numeroMappe-1).each { i-> println &quot;Importo &quot; + listFile[i] + &quot; e creo &quot; + listNames[i] }

IMPORT DEI DATI IN JGRASS (0.. numeroMappe-1 ).each { i-> println &quot;Importo &quot; + listFile[i] + &quot; e creo &quot; + listNames[i] } il ciclo va fatto da 0 al limite meno 1, visto che le liste hanno una numerazione che parte da 0. per accedere a un elemento della lista, si usano le parentesi [indice] . Per la concatenazione di stringhe si usa il + Il risultato: Importo /home/moovida/data/1x1zip/dtm000358_WGS.ASC e creo dtm000358 Importo /home/moovida/data/1x1zip/dtm000359_WGS.ASC e creo dtm000359 Importo /home/moovida/data/1x1zip/dtm000360_WGS.ASC e creo dtm000360

(0.. numeroMappe-1 ).each { i->

println &quot;Importo &quot; + listFile[i] + &quot; e creo &quot; + listNames[i]

}

il ciclo va fatto da 0 al limite meno 1, visto che le liste hanno una numerazione che parte da 0.

per accedere a un elemento della lista, si usano le parentesi [indice] .

Per la concatenazione di stringhe si usa il +

Il risultato:

Importo /home/moovida/data/1x1zip/dtm000358_WGS.ASC e creo dtm000358

Importo /home/moovida/data/1x1zip/dtm000359_WGS.ASC e creo dtm000359

Importo /home/moovida/data/1x1zip/dtm000360_WGS.ASC e creo dtm000360

IMPORT DEI DATI IN JGRASS Ora siamo pronti per importare i dati. Utilizzeremo il comando r.in.gdal dei comandi nativi di GRASS. Diamo una controllata alla sintassi del comando: grass r.in.gdal --help Se al momento dell'esecuzione vi sono parti selezionate nell'editor, vengono eseguite solamente quelle. Quindi selezionando solo la riga appena inserita ed eseguendo, tutto il resto viene ignorato e ci viene stampata in output il messaggio di aiuto di r.in.gdal .

IMPORT DEI DATI IN JGRASS Usage: r.in.gdal [ -o efk] input=string output=name [band=value] [target=string] [title=&quot;phrase&quot;] [location=string] [ --overwrite ] Flags: -o Override projection (use location's projection) -e Extend location extents based on new dataset -f List supported formats then exit -k Keep band numbers instead of using band color names --o Force overwrite of output files Parameters: input Raster file to be imported output Name for output raster map band Band to select (default is all bands) target Name of location to read projection from for GCPs transformation title Title for resultant raster map location Name for new location to create

LO SCRIPT COMPLETO # MAPSET = /home/moovida/TMP/testlocation/testmapset/ # GISBASE = /usr/lib/grass/ def cartellaFileZippati = new File(&quot;/home/moovida/data/1x1zip&quot;); def listFile = [] def listNames = [] cartellaFileZippati.eachFile{ file -> if ( file.name.endsWith(&quot;ASC&quot;)) { listFile << file.absolutePath listNames << file.name.replaceFirst(&quot;_WGS.ASC&quot;,&quot;&quot;) } } def numeroMappe = listFile.size (0..numeroMappe-1).each { i-> def percorso = listFile[i] def nome = listNames[i] grass r.in.gdal --o input=$percorso output=$nome }

IMPORT DEI DATI IN JGRASS Il risultato di queste operazioni è una serie di fogli di DTM: hanno diversa risoluzione in funzione della risoluzione originale sono pezzi di DTM a se stanti devono ricoprire tutta l'area del bacino che si desidera studiare Come si possono utilizzare ai fini dell'analisi idro-geomorfologica?

Il risultato di queste operazioni è una serie di fogli di DTM:

hanno diversa risoluzione in funzione della risoluzione originale

sono pezzi di DTM a se stanti

devono ricoprire tutta l'area del bacino che si desidera studiare

Come si possono utilizzare ai fini dell'analisi idro-geomorfologica?

IMPORT DEI DATI IN JGRASS Il risultato di queste operazioni è una serie di fogli di DTM: hanno diversa risoluzione in funzione della risoluzione originale sono pezzi di DTM a se stanti devono ricoprire tutta l'area del bacino che si desidera studiare Come si possono utilizzare ai fini dell'analisi idro-geomorfologica?

Il risultato di queste operazioni è una serie di fogli di DTM:

hanno diversa risoluzione in funzione della risoluzione originale

sono pezzi di DTM a se stanti

devono ricoprire tutta l'area del bacino che si desidera studiare

Come si possono utilizzare ai fini dell'analisi idro-geomorfologica?

IMPORT DEI DATI IN JGRASS sono pezzi di DTM a se stanti Per far fronte a questo problema è necessario unire i fogli di DTM che ora hanno una risoluzione uniforme di 1x1 m. Il comando che si usa in questo caso è: grass r.patch –help

sono pezzi di DTM a se stanti

Per far fronte a questo problema è necessario unire i fogli di DTM che ora hanno una risoluzione uniforme di 1x1 m. Il comando che si usa in questo caso è:

grass r.patch –help

IMPORT DEI DATI IN JGRASS Anche in questo caso si può ripetere l'operazione più volte unendo a blocchi i fogli di DTM oppure automatizzare il ciclo su tutti i dati alla stessa risoluzione.

IMPORT DEI DATI IN JGRASS Approcio 1: r.patch di tutte le mappe in un colpo // commento la parte che eseguiva r.in.gdal /*(0..numeroMappe-1).each { i-> def percorso = listFile[i] def nome = listNames[i] grass r.in.gdal --o input=$percorso output=$nome }*/ uso join per trasformare la lista delle mappe in una stringa def mappe = listNames.join(&quot;,&quot;) setto la regione attiva a una regione contenente tutte le mappe grass g.region rast=$mappe grass r.patch --o input=$mappe output=unione

IMPORT DEI DATI IN JGRASS Il risultato è quell o desiderato, tranne per la mappa dei colori, che presenta qualche buco:

IMPORT DEI DATI IN JGRASS I buchi nelle tabelle dei colori si colmano facilmente con il comando r.colors: grass r.colors map=unione color=rainbow e si ottiene la mappa finale desiderata.

IMPORT DEI DATI IN JGRASS Approcio 2: visto che r.patch accetta di processare un numero di mappe limitato, è spesso necessario fare un ciclo sulle mappe e patcharle una alla volta. Questo viene lasciato come spunto per un esercizio!

ANALISI DEI DATI IN JGRASS La risoluzione di 1m è troppo elevata per gestire questi dati su un pc normale e non dà nessun vantaggio ai fini idro-geomorfologici. Quello che conviene fare su bacini estesi è di utilizzare la risoluzione di 5m. La cosa migliore sarebbe utilizzare algoritmi di interpolazione quali ad esempio r.resamp.stats. Per ora settiamo semplicemente la regione attiva a risoluzione di 5 metri. grass g.region res=5

ANALISI DEI DATI IN JGRASS È ora possibile effettuare tutte le analisi geomorfologiche ed idrologiche nell'ambiente di scripting di JGrass ricordando la sintassi dei comandi. jgrass h.pitfiller --help Usage:h.pitfiller --igrass-elevation elevation --ograss-pit pit Parameters: --igrass-elevation the map containing the elevations --ograss-pit the map of the correct elevations

ANALISI DEI DATI IN JGRASS E di conseguenza: jgrass h.pitfiller --igrass-elevation unione --ograss-pit pit Allo stesso modo si procede nel calcolo di: h.flow h.draindir h.extractnetwork h.wateroutlet

SCRIPTING Attraverso il linguaggio di scripting si possono semplificare, oltre ad automatizzare, alcune operazioni. Vengono proposti di seguito alcuni esempi.

SCRIPTING Lettura di una mappa raster e fare delle operazioni sui dati contenuti in essa.

SCRIPTING Lettura di una mappa raster e fare delle operazioni sui dati contenuti in essa.

SCRIPTING Generazione del profilo di una mappa date le coordinate di inizio e fine dello stesso.

SCRIPTING Generare il profilo di una mappa date le coordinate di inizio e fine dello stesso.

SCRIPTING Generare il profilo di una mappa date le coordinate di inizio e fine dello stesso.

SCRIPTING Generare il profilo di una mappa date le coordinate di inizio e fine dello stesso.

SCRIPTING Generare il profilo di una mappa date le coordinate di inizio e fine dello stesso.

SCRIPTING Lettura dei dati di uno shapefile e operazioni sui dati letti.

SCRIPTING Leggere i dati di uno shapefile e fare operazioni sui dati letti.

SCRIPTING Leggere i dati di uno shapefile e fare operazioni sui dati letti.

SCRIPTING Creazione di uno shapefile delle curve di livello partendo da un DTM.

SCRIPTING Creare uno shapefile delle curve di livello partendo da un DTM.

GRAZIE DELL'ATTENZIONE...

Add a comment

Related presentations

Presentación que realice en el Evento Nacional de Gobierno Abierto, realizado los ...

In this presentation we will describe our experience developing with a highly dyna...

Presentation to the LITA Forum 7th November 2014 Albuquerque, NM

Un recorrido por los cambios que nos generará el wearabletech en el futuro

Um paralelo entre as novidades & mercado em Wearable Computing e Tecnologias Assis...

Microsoft finally joins the smartwatch and fitness tracker game by introducing the...

Related pages

Be groovy with JGrass - Technology - docslide.it

Presentation done about scripting with the JGrass console. The presentation is in Italian, but there are many code snippets, so it could be easy to ...
Read more

Download Usare Groovy Con SOAPUI - Documents

Download Usare Groovy Con SOAPUI Confirm. Please donate to us. ... Be groovy with JGrass Presentation done about scripting with the JGrass console.
Read more

Groovy Grass - Coloured Artificial Grass: Verde Sports

Buy Groovy Grass Coloured Artificial Grass from Verde Sports Ltd. Groovy Grass is a soft and dense fibre coloured artificial grass produced in the UK.
Read more

Groovy GRASSES on Pinterest | Ornamental Grasses, Grasses ...

All things #perennial and #annual #grasses and the fun ways to design with them in the #garden and #landscape. | See more about Ornamental Grasses, Grasses ...
Read more

Groovy Green Grass – Enroot Products

Premium grass seed for 750 Ft. Sq. of lawn repair. Sprouts fast − Grass appears within a week; Looks great – Color blends with existing lawn; Fills in ...
Read more

Groovy Grasses on Pinterest | Grasses, Ribbons and Plants

Ornamental grasses mostly for Zones 3 - 4 | See more about Grasses, Ribbons and Plants.
Read more

Groovy Grass « CoverSolutions

Product Description. The Groovy Grass is a new coloured artificial grass designed to offer a whole new dimension to luxury and trendy indoor/ outdoor living.
Read more

GitHub - joshareed/grass: Groovy Authoring for Static Sites

README.md Groovy Authoring for Static Sites (GRASS) A simple script inspired by Rizzo and Octopress for generating static sites and blogs with Groovy.
Read more

>Groovy Grass | Bizarro!

(To make the image, like, all big and awesome, click the row of seats.) Bizarro is brought to you today by Extremely Slow Dogs. After this cartoon ran in ...
Read more