Geoprocessing con GRASS
Transcript
Geoprocessing con GRASS
Geoprocessing Geoprocessing con con GRASS GRASS Geoprocessing con GRASS Paolo Zatelli Dipartimento di Ingegneria Civile e Ambientale Università di Trento Paolo Zatelli | Università di Trento | 1/49 Geoprocessing Geoprocessing con con GRASS GRASS Combinazione di entità vettoriali La combinazione di entità vettoriali consentono di ricavare nuove primitive geometriche attraverso: ● overlay di mappe con operazioni logiche; ● patch di mappe; ● selezione di primitive geometriche sovrapposte; ● calcolo della distanza tra due primitive e realizzazione dei segmenti di distanza minima; ● creazione di punti o segmenti lungo linee; ● creazione di buffer attorno a punti, linee e aree. Paolo Zatelli | Università di Trento | 2/49 Geoprocessing Geoprocessing con con GRASS GRASS Combinazione di aree con aree, linee e punti La combinazione di aree con aree, linee e punti: ● ● ● ● overlay: crea nuove mappe dalla combinazione di primitive geometriche con operatori logici AND, OR, XOR e NOT; patch di mappe: unisce le primitive di diverse mappe anche sovrapponendole; selezione di primitive geometriche sovrapposte, senza crearne di nuove; dissolving: unione di entità con la stessa categoria in un'unica entità. Paolo Zatelli | Università di Trento | 3/49 Geoprocessing Geoprocessing con con GRASS GRASS Buffer Consiste nella creazione di aree attorno a primitive (punti, linee e aree) di forma simile all'entità di partenza, tipicamente più grandi: ● ● ● a larghezza costante (rispetto a due assi dati); a larghezza diversa per le diverse categorie (la larghezza è solitamente letta dalla tabella associata alla mappa); a larghezza diversa tra lato sinistro e destro, rispetto al verso di percorrenza di linee o boundary. Paolo Zatelli | Università di Trento | 4/49 Geoprocessing Geoprocessing con con GRASS GRASS Altre operazioni sui vettoriali Altre operazioni combinano le diverse primitive geometriche (punti, linee e aree): ● calcolo delle distanze tra punti e le diverse primitive geometriche (punti, linee e aree), con possibilità di creare i segmenti di minimo percorso; ● creazione di punti e segmenti lungo linee; ● divisione di linee in segmenti; ● calcolo delle proprietà geometriche (lunghezza, area, ecc.) di entità e memorizzazione in una tabella. Paolo Zatelli | Università di Trento | 5/49 Geoprocessing Geoprocessing con con GRASS GRASS Moduli di GRASS I moduli di GRASS per il geoprocessing sono: ● v.extract – estrae primitive vettoriali da mappe in base alla categoria o ad una query SQL sulla tabella; ● v.overlay – combina aree con punti, linee ed aree usando operatori logici (AND, OR, XOR e NOT); ● v.patch – “somma” tra loro mappe sovrapponendo le entità; ● v.select – seleziona (senza modificarle) entità sovrapposte ad una entità data; ● v.buffer – crea buffer attorno a primitive geometriche date; ● v.parallel – crea primitive geometriche parallele a primitive geometriche date; Paolo Zatelli | Università di Trento | 6/49 Geoprocessing Geoprocessing con con GRASS GRASS Moduli di GRASS Altri moduli di GRASS per il geoprocessing sono: ● v.to.db – calcola, ed eventualmente aggiunge ad una tabella, alcune grandezze geometriche (lunghezza, area, ecc.); ● v.distance – calcola la distanza fra punti ed altre entità (punti, linee ed aree), con possibilità di creare i segmenti di minimo percorso; ● v.to.points – crea punti ad intervalli regolari lungo linee; ● v.segment – crea punti e segmenti lungo linee; ● v.split – divide linee in segmenti. Paolo Zatelli | Università di Trento | 7/49 Geoprocessing Geoprocessing con con GRASS GRASS Caratteristiche comuni ai moduli Alcune caratteristiche, che derivano dall'implementazione della libreria vettoriale di GRASS, sono comuni a tutti i moduli: ● i moduli non sovrascrivono mappe esistenti, è necessario specificare l'opzione -- overwrite oppure cancellarle prima; ● è possibile indicare il tipo di primitiva (point, line, boundary, centroid, area, face) nelle mappe di input a cui applicare il modulo; ● è possibile indicare il layer a cui si riferiscono le categorie e quindi tabelle. Paolo Zatelli | Università di Trento | 8/49 Geoprocessing Geoprocessing con con GRASS GRASS v.extract estrae primitive vettoriali in base alla categoria o ad una query SQL sulla tabella. La sintassi è: v.extract [-dtrovq] input=name output=name [type=string[,string,...]] [layer=integer] [list=range] [where=sql_query] [file=name] [random=integer] [new=integer] [-overwrite] [--verbose] [--quiet] flags: -d dissolve i contorni di primitive contigue con uguale categoria; -t non copia la tabella del file di input; -r inverte la selezione; input nome della mappa di input; output nome della mappa di input; type tipo di primitiva da estrarre; layer layer delle entità da estrarre; where query SQL in base a cui estrarre le entità; file file che contiene la lista delle categorie delle entità da estrarre; random numero di categorie di primitive random da estrarre (< totale categorie); new indica se mantenere le categorie originali (-1) o assegnare una nuova categoria (>0, in questo caso la tabella non è copiata); list lista delle categorie delle entità da estrarre; Paolo Zatelli | Università di Trento | 9/49 Geoprocessing Geoprocessing con con GRASS GRASS v.extract Esempio: v.extract input=fields@PERMANENT output=fields_mitchell type=area layer=1 new=1 where="label='C. Mitchell#1' OR label='C. Mitchell#2' OR label='C. Mitchell#3' OR label='C. Mitchell#4' OR label='C. Mitchell#5' OR label='C. Mitchell#6'" estrae i terreni di C. Mitchell dalla mappa fields. v.extract input=soils@PERMANENT output=soils_GBE type=area layer=1 new=1 where="label='GBE'" estrae le aree con tipo di suolo GBE dalla mappa soils. Paolo Zatelli | Università di Trento | 10/49 Geoprocessing Geoprocessing con con GRASS GRASS v.extract Paolo Zatelli | Università di Trento | 11/49 Geoprocessing Geoprocessing con con GRASS GRASS v.extract Esempio con dissolve: v.extract input=fields@PERMANENT output=fields_mitchell_dissolve type=point,line,boundary,centroid,area,face layer=1 new=1 where="(label='C. Mitchell#1') OR (label='C. Mitchell#2') OR (label='C. Mitchell#3') OR (label='C. Mitchell#4') OR (label='C. Mitchell#5') OR (label='C. Mitchell#6')" d estrae i terreni di C. Mitchell dalla mappa fields e crea una sola area con categoria 1. Paolo Zatelli | Università di Trento | 12/49 Geoprocessing Geoprocessing con con GRASS GRASS senza dissolve Paolo Zatelli | Università di Trento | con dissolve 13/49 Geoprocessing Geoprocessing con con GRASS GRASS v.dissolve dissolve i confini di aree adiacenti in funzione della loro categoria o del valore di un attributo. La sintassi è: v.dissolve input=name output=name [layer=integer] [column=string] [--overwrite] [--verbose] [--quiet] flags: --overwrite sovrascrive il file di output --verbose visualizza più commenti; --quiet visualizza meno commenti; input nome della mappa di input; output nome della mappa di output; layer layer delle entità da estrarre (-1 = tutti i layer); column colonna che contiene l'attributo per il dissolve. Se il parametro column non è specificato vengono usate le categorie (è identico a v.extract -d). E' uno script che usa v.reclass e v.extract -d in cascata. Paolo Zatelli | Università di Trento | 14/49 Geoprocessing Geoprocessing con con GRASS GRASS v.overlay combina aree con punti, linee ed aree usando operatori logici (AND, OR, XOR e NOT); La sintassi è: v.overlay [-t] ainput=name [atype=string[,string,...]] [alayer=integer] binput=name [btype=string[,string,...]] [blayer=integer] output=name [operator=string] [olayer=integer[,integer,...]] [snap=float] [--overwrite] [--verbose] [--quiet] flags: -t non crea la tabella degli attributi; ainput nome della prima mappa di input; atype tipo di entità nella prima mappa di input; alayer layer della prima mappa di input; binput nome della seconda mappa di input; btype tipo di entità nella seconda mappa di input; blayer layer della seconda mappa di input; output nome della mappa di output; operator operatore logico (AND, OR, XOR e NOT) da usare (default OR); olayer layer nella mappa di output, per le nuove categorie, la prima mappa e la seconda mappa. snap soglia di snapping per i boundaries: disabilitato se snap <= 0, default: 1e-8 Paolo Zatelli | Università di Trento | 15/49 Geoprocessing Geoprocessing con con GRASS GRASS v.overlay Operatore AND: v.overlay ainput=uno atype=area alayer=1 binput=due btype=area blayer=1 output=test_and operator=and olayer=1,0,0 Paolo Zatelli | Università di Trento | 16/49 Geoprocessing Geoprocessing con con GRASS GRASS v.overlay Operatore OR: v.overlay ainput=uno atype=area alayer=1 binput=due btype=area blayer=1 output=test_or operator=or olayer=1,0,0 Paolo Zatelli | Università di Trento | 17/49 Geoprocessing Geoprocessing con con GRASS GRASS v.overlay Operatore XOR: v.overlay ainput=uno atype=area alayer=1 binput=due btype=area blayer=1 output=test_xor operator=xor olayer=1,0,0 Paolo Zatelli | Università di Trento | 18/49 Geoprocessing Geoprocessing con con GRASS GRASS v.overlay Operatore NOT: v.overlay ainput=uno atype=area alayer=1 binput=due btype=area blayer=1 output=test_not operator=not olayer=1,0,0 Paolo Zatelli | Università di Trento | 19/49 Geoprocessing Geoprocessing con con GRASS GRASS v.patch combina mappe vettoriali in una nuova mappa. La sintassi è: v.patch [-ae] input=name[,name,...] output=name [bbox=name] [--overwrite] [--verbose] [--quiet] flags: -a aggiunge le mappe di input a un file esistente; -e copia la tabella degli attributi (solo sul layer 1); input nomi delle mappe di input; output nome della mappa di output; bbox nome della mappa di output che conterrà la bounding box delle mappe di input. Paolo Zatelli | Università di Trento | 20/49 Geoprocessing Geoprocessing con con GRASS GRASS v.patch v.patch input=uno,due output=test_patch e Paolo Zatelli | Università di Trento | 21/49 Geoprocessing Geoprocessing con con GRASS GRASS v.select seleziona punti, linee ed aree da una mappa (a) che si sovrappongono a primitive in una mappa data (b). La sintassi è: v.select [-tcr] ainput=name [atype=string[,string,...]] [alayer=integer] binput=name [btype=string[,string,...]] [blayer=integer] output=name [operator=string] [relate=string] [--overwrite] [--verbose] [--quiet] flags: -t non crea la tabella degli attributi, -c include features senza categoria, -r inverte la selezione; ainput nome della prima mappa di input, da cui vengono selezionate le entità; atype tipo di entità nella prima mappa di input; alayer layer della prima mappa di input; binput nome della seconda mappa di input, in cui sono memorizzate le entità per la selezione; btype tipo di entità nella seconda mappa di input; blayer layer della seconda mappa di input; output nome della mappa di output; operator operatore logico (overlap) da usare; relate Intersection Matrix Pattern per l'operatore “relate”. Paolo Zatelli | Università di Trento | 22/49 Geoprocessing Geoprocessing con con GRASS GRASS v.select Se GRASS è compilato con il supporto per le librerie GEOS sono disponibili operatori aggiuntivi: equals – le primitive sono uguali spazialmente ● disjoint - le primitive non si intersecano ● intersects - le primitive si intersecano ● touches - le primitive si toccano ● crosses - le primitive si incrociano ● within – la primitiva nella mappa A è completamente contenuta in una primitiva nella mappa B ● contains - la primitiva nella mappa A contiene una primitiva nella mappa B ● overlaps – le primitive si sovrappongono (anche parzialmente) ● relate – la primitiva in A è ha una relazione (di quelle sopra) con una primitiva nella mappa B ● Paolo Zatelli | Università di Trento | 23/49 Geoprocessing Geoprocessing con con GRASS GRASS v.select - aree v.select ainput=soils atype=area alayer=1 binput=fields_mitchell btype=area blayer=1 output=soils_mitchell_select operator=overlap Paolo Zatelli | Università di Trento | 24/49 Geoprocessing Geoprocessing con con GRASS GRASS v.select - linee v.select ainput=roads atype=line alayer=1 binput=fields_portillo1 btype=area blayer=1 output=roads_portillo_select operator=overlap Paolo Zatelli | Università di Trento | 25/49 Geoprocessing Geoprocessing con con GRASS GRASS v.buffer crea buffer attorno a primitive geometriche date. La sintassi è: v.buffer [-sc] input=name output=name [type=string[,string,...]] [layer=integer] [distance=float] [minordistance=integer] [angle=float] [bufcolumn=name] [scale=float] [tolerance=float] [debug=string] [buffer=float] [--overwrite] [--verbose] [--quiet] flags: -s crea gli angoli esterni retti, -c non va oltre la fine delle linee; input nome della mappa di input contenente le entità attorno cui realizzare i buffer; output nome della mappa di output; type tipo di entità nella mappa di input attorno cui realizzare i buffer; layer layer delle entità nella mappa di input; distance (oppure buffer) larghezza del buffer lungo l'asse principale (in unità della mappa); minordistance larghezza del buffer lungo l'asse secondaria (in unità della mappa); angle angolo dell'asse principale rispetto all'asse x (oppure E oppure longitudine); bufcolumn colonna della tabella da cui leggere le larghezze dei buffer; scale fattore di scala per i valori letti nella tabella; tolerance massima distanza fra archi teorici e segmenti di poligoni: debug ignorato, solo per compatibilità con vecchie versioni. Paolo Zatelli | Università di Trento | 26/49 Geoprocessing Geoprocessing con con GRASS GRASS v.buffer - linee v.buffer input=streams_new output=streams_buffer_line type=line layer=1 distance=200 scale=1.0 tolerance=0.01 Paolo Zatelli | Università di Trento | 27/49 Geoprocessing Geoprocessing con con GRASS GRASS v.buffer - aree v.buffer input=streams_new output=streams_buffer_area type=area layer=1 distance=300 scale=1.0 tolerance=0.01 Paolo Zatelli | Università di Trento | 28/49 Geoprocessing Geoprocessing con con GRASS GRASS v.buffer – larghezze da DB v.buffer input=streams_new output=streams_buffer_db_line type=line layer=1 bufcolumn=buffer scale=1.0 tolerance=0.01 Paolo Zatelli | Università di Trento | 29/49 Geoprocessing Geoprocessing con con GRASS GRASS v.buffer – lungo l'asse principale v.buffer overwrite verbose input=line1 output=line_major distance=100 Paolo Zatelli | Università di Trento | 30/49 Geoprocessing Geoprocessing con con GRASS GRASS v.buffer – lungo l'asse secondaria v.buffer overwrite verbose input=line1 output=line_minor distance=1 minordistance=100 Paolo Zatelli | Università di Trento | 31/49 Geoprocessing Geoprocessing con con GRASS GRASS v.buffer – rotazione di 45° degli assi v.buffer overwrite verbose input=line1 output=line_minor distance=1 minordistance=100 angle=45 Paolo Zatelli | Università di Trento | 32/49 Geoprocessing Geoprocessing con con GRASS GRASS v.parallel crea primitive geometriche parallele a primitive geometriche date. La sintassi è: v.parallel [-rb] input=name output=name distance=float [minordistance=float] [angle=float] side=string [tolerance=float] [--overwrite] [--verbose] [--quiet] flags: -r arrotonda gli angoli esterni, -b crea linee simmetriche su entrambi i lati (come v.buffer, ma linee e non aree); input nome della mappa di input contenente le entità di cui tracciare le parallele; output nome della mappa di output; distance distanza delle parallele dalle linee originali lungo l'asse principale (in unità della mappa); minordistance distanza delle parallele lungo l'asse secondaria (in unità della mappa); angle angolo dell'asse principale rispetto all'asse x (o E, o longitudine); side lato su cui tracciare le linee (left, right, both); tolerance tolleranza per gli archi di polilinea (in unità mappa). Paolo Zatelli | Università di Trento | 33/49 Geoprocessing Geoprocessing con con GRASS GRASS v.parallel v.parallel input=streams_new output=streams_right side=right distance=100 v.parallel input=streams_new output=streams_left side=left distance=300 Paolo Zatelli | Università di Trento | 34/49 Geoprocessing Geoprocessing con con GRASS GRASS v.to.db calcola, ed eventualmente aggiunge ad una tabella, alcune grandezze geometriche (lunghezza, area, ecc.). La sintassi è: v.to.db [-psc] map=name [type=string[,string,...]] [layer=integer] [qlayer=integer] option=string [units=string] [columns=name[,name,...]] [qcolumn=name] [-verbose] [--quiet] flags: -p visualizza il risultato sul terminale, non modifica la tabella; -s visualizza solo la query SQL; -c calcola il totale delle quantità richieste, non un valore per entità; map nome della mappa di input; type tipo di entità nella mappa di input da elaborare; layer layer da usare nella mappa di input; qlayer layer nella mappa di input da usare per le query; Paolo Zatelli | Università di Trento | 35/49 Geoprocessing Geoprocessing con con GRASS GRASS v.to.db continua option valore da calcolare e visualizzare o inserire nella tabella: cat: inserisce una nuova colonna per la categoria, se non esiste già; area: superficie delle aree; compact: compatezza delle aree ( = perimetro / 2 * radq(PI * area)); fd: dimensione frattale dei contorni dei poligoni, fd = 2 * (log(perimetro) / log(area)); perimeter: lunghezza dei perimetri delle aree; length: lunghezza delle linee; count: numero di entità per ogni categoria; coor: coordinate dei punti, X,Y o X,Y,Z; start: coordinate del punto iniziale di una linea o boundary, X,Y o X,Y,Z; end: coordinate del punto finale di una linea o boundary, X,Y o X,Y,Z; sides: categorie delle aree a sinistra e a destra di un boundary, è letta dal layer 'qlayer'; query: risultato di una query per tutti i record delle geometrie, dalla tabella sul layer 'qlayer'; slope: pendenza delle linee o contorni; sinuous: sinuosità delle linee, lunghezza/distanza degli estremi. azimuth: azimuth della linea (angolo tra direzione Nord e direzione del segmento tra i punti iniziale e finale) units unità di misura per i valori in output (mi, miles, f, feet, me, meters, k, kilometers, a, acres, h, hectares); colums nome/i della/e colonna/e in cui scrivere i valori; qcolumn nome della colonna su cui fare le query (sulla tabella del layer qlayer). Paolo Zatelli | Università di Trento | 36/49 Geoprocessing Geoprocessing con con GRASS GRASS v.to.db v.to.db map=streams_new type=point,line,boundary,centroid layer=1 qlayer=1 option=length units=me column=lenght p visualizza: cat|length 1|2426.08071449311 1|32614.5522076325 2|183157.29968834 3|3458.83045471837 421|0 per ogni categoria è visualizzata la lunghezza delle linee. Paolo Zatelli | Università di Trento | 37/49 Geoprocessing Geoprocessing con con GRASS GRASS v.distance calcola la distanza fra punti ed altre entità (punti, linee ed aree), con possibilità di creare i segmenti di minimo percorso; La sintassi è: v.distance [-pa] from=name to=name [from_type=string[,string,...]] [to_type=string[,string,...]] [from_layer=integer] [to_layer=integer] [output=name] [dmax=float] [dmin=float] upload=string[,string,...] column=name[,name,...] [to_column=name] [table=name] [--overwrite] [--verbose] [--quiet] flags: -p visualizza il risultato sul terminale, non modifica la tabella; -a calcola le distanze a tutte le entità entro una distanza di soglia; from nome della mappa di input contenente le entità da cui calcolare le distanze; to nome della mappa di input contenente le entità a cui calcolare le distanze; from_type tipo di entità nella prima mappa di input (point,centroid); to_type tipo di entità nella seconda mappa di input (point, line, boundary, centroid, area); from_layer layer della prima mappa di input; to_layer layer della seconda mappa di input; output nome della mappa di output; Paolo Zatelli | Università di Trento | 38/49 Geoprocessing Geoprocessing con con GRASS GRASS v.distance continua dmax massima distanza entro cui calcolare le distanza (-1 per tutte); dmin minima distanza entro cui calcolare le distanza (-1 per tutte); upload tipo di relazione per entità vicine (cat, dist, to_x, to_y, to_along, to_angle, to_attr); column nome della colonna in cui scrivere i valori calcolati (deve esistere); to_column nome della colonna da cui leggere gli attributi, per upload=to_attr; table nome della tabella da creare se si usa l'opzione -a. Paolo Zatelli | Università di Trento | 39/49 Geoprocessing Geoprocessing con con GRASS GRASS v.distance - punti e aree v.distance from=archsites_not_natfor_fields to=bugsites_natfor from_type=point to_type=point,line,area from_layer=1 to_layer=1 output=archsites_not_natfor_dist dmax=1 upload=dist column=dist p Paolo Zatelli | Università di Trento | 40/49 Geoprocessing Geoprocessing con con GRASS GRASS v.distance - punti e linee v.distance from=archsites@PERMANENT to=roads@PERMANENT output=archistes_to_roads from_type=point to_type=point,line,area from_layer=1 to_layer=1 dmax=1 upload=dist column=dist Paolo Zatelli | Università di Trento | 41/49 Geoprocessing Geoprocessing con con GRASS GRASS v.to.points crea punti ad intervalli regolari lungo linee. La sintassi è: v.to.points [-nvit] input=name output=name [type=string[,string,...]] [llayer=integer] [dmax=float] [--overwrite] [--verbose] [--quiet] flags: -n crea un punto in ogni nodo delle linee; -v crea un punto in ogni vertice delle linee; -i interpola tra i vertici delle linee; -t non crea la tabella degli attributi; input nome della prima mappa di input che contiene le linee; type tipo di entità nella mappa di input; output nome della mappa di output; llayer layer delle linee (default 1); dmax massima distanza fra i punti lungo la linea (default 100). Sul primo layer associa al file di output la tabella del file di input, sul secondo una nuova tabella contente per ogni punto creato una colonna lcat che indica la categoria del segmento della mappa di partenza a cui il punto è sovrapposto ed una colonna along che contiene la distanza progressiva dal primo nodo. Paolo Zatelli | Università di Trento | 42/49 Geoprocessing Geoprocessing con con GRASS GRASS v.to.points v.to.points input=railroads@PERMANENT type=point,line,boundary,centroid output=railroads_points llayer=1 dmax=1000 Paolo Zatelli | Università di Trento | 43/49 Geoprocessing Geoprocessing con con GRASS GRASS v.to.points – con vertici v.to.points input=railroads@PERMANENT type=point,line,boundary,centroid output=railroads_points llayer=1 dmax=1000 v Paolo Zatelli | Università di Trento | 44/49 Geoprocessing Geoprocessing con con GRASS GRASS v.segment crea punti e segmenti lungo linee. La sintassi è: v.segment input=name output=name [llayer=integer] [file=name] [--overwrite] [-verbose] [--quiet] input nome della mappa di input contenente le linee; llayer layer della linee sulla mappa di input; output nome della mappa di output; file file contenente le posizioni di linee e/o punti, altrimenti è usato lo stdin. La posizione di punti e linee va specificato sullo stdin: P <point id> <line cat> <offset> [<side offset>] L <segment id> <line cat> <start offset> <end offset> [<side offset>] ad es. echo "L 2 1 2000 3000"|v.segment input=railroads output=railroads_segment_line llayer=1 echo "P 1 1 1000"|v.segment input=railroads output=railroads_segment_point llayer=1 Paolo Zatelli | Università di Trento | 45/49 Geoprocessing Geoprocessing con con GRASS GRASS v.segment echo "P 1 1 1000"|v.segment input=railroads output=railroads_segment_point llayer=1 echo "L 2 1 2000 3000"|v.segment input=railroads output=railroads_segment_line llayer=1 Paolo Zatelli | Università di Trento | 46/49 Geoprocessing Geoprocessing con con GRASS GRASS v.split divide linee in segmenti. La sintassi è: v.split input=name output=name [length=float] [vertices=integer] [--overwrite] [-verbose] [--quiet] input nome della mappa di input; output nome della mappa di output; lenght massima lunghezza dei segmenti; vertices massimo numero di vertici per ogni segmento. Il parametro vertices indica il numero massimo di vertici consecutivi della linea di partenza che ogni segmento deve contenere (2=solo segmenti rettilinei). Paolo Zatelli | Università di Trento | 47/49 Geoprocessing Geoprocessing con con GRASS GRASS v.split v.split input=railroads output=railroads_split_num vertices=10 Paolo Zatelli | Università di Trento | 48/49 Geoprocessing Geoprocessing con con GRASS GRASS Licenza Questa presentazione è © 2014 Paolo Zatelli, disponibile come Paolo Zatelli | Università di Trento | 49/49