Be groovy with JGrass

download Be groovy with JGrass

If you can't read please download the document

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.

Transcript of Be groovy with JGrass

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

2. EDITOR DI SCRIPTING DI JGRASS 3. 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 = ... 4. EDITOR DI SCRIPTING DI JGRASS # MAPSET= ... # GISBASE = ... 5. EDITOR DI SCRIPTING DI JGRASS Il file di scripting di default di JGrass viene creato nella home dell'utente ed chiamatodefault.jgrasse 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. 6. EDITOR DI SCRIPTING DI JGRASS

  • comandi di JGrass devono essere preceduti dalla scritta:
  • jgrass oppure inseriti injgrass { comando }
  • comandi di GRASS devono essere preceduti dalla scritta:
  • grassoppure inseriti ingrass { 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

7. 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 dellaConsoleche si apre automaticamente nella parte in basso a lato del Catalogo

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

9. EDITOR DI SCRIPTING DI JGRASS 10. EDITOR DI SCRIPTING DI JGRASS 11. 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 interagirecon il programma

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

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

14. 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") 15. 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 16. 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 17. IMPORT DEI DATI IN JGRASS Creiamo una lista dei file che ci interessano, in modo da poterla usare dopo: // creo una lista vuota deflistFile= []; // la popolo con i percorsi dei file che voglio importare cartellaFileZippati.eachFile{ file -> if ( file.name.endsWith("ASC")) { listFile 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 19. 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 = [] deflistNames= [] cartellaFileZippati.eachFile{ file -> if ( file.name.endsWith("ASC")) { listFile printlni } secondo la quale vengono stampate in output 6 righe riportanti l'indice del ciclo, da 0 a 5: 0, 1, 2, 3, 4, 5 22. 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 "Importo " + listFile[i] + " e creo " + listNames[i] } 23. IMPORT DEI DATI IN JGRASS

  • (0.. numeroMappe-1 ).each { i->
  • println "Importo " +listFile[i]+ " e creo " +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

24. IMPORT DEI DATI IN JGRASS Ora siamo pronti per importare i dati.Utilizzeremo il comandor.in.gdaldei 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 dir.in.gdal . 25. IMPORT DEI DATI IN JGRASS Usage: r.in.gdal[ -o efk]input=string output=name[band=value] [target=string] [title="phrase"] [location=string] [ --overwrite ] Flags: -oOverride projection (use location's projection) -eExtend location extents based on new dataset -fList supported formats then exit -kKeep band numbers instead of using band color names --oForce overwrite of output files Parameters: inputRaster file to be imported outputName for output raster map bandBand to select (default is all bands) targetName of location to read projection from for GCPs transformation titleTitle for resultant raster map locationName for new location to create 26. LO SCRIPT COMPLETO # MAPSET = /home/moovida/TMP/testlocation/testmapset/ # GISBASE = /usr/lib/grass/ def cartellaFileZippati = new File("/home/moovida/data/1x1zip"); def listFile = [] def listNames = [] cartellaFileZippati.eachFile{ file -> if ( file.name.endsWith("ASC")) { listFile