Gestione di dati vettoriali in GRASS 6.4 - UniTN

Gestione
Gestione di
di dati
dati vettoriali
vettoriali in
in GRASS
GRASS 6.4
6.4
Gestione di dati vettoriali in GRASS 6.4
Paolo Zatelli
Dipartimento di Ingegneria Civile e Ambientale
Università di Trento
Paolo Zatelli | Università di Trento |
1/28
Gestione
Gestione di
di dati
dati vettoriali
vettoriali in
in GRASS
GRASS 6.4
6.4
GRASS 6.4
Le principali caratteristiche della gestione di mappe vettoriali in
GRASS 6.x sono:
●
architettura vettoriale 3D, multi attributo e multi layer,
indicizzazione spaziale;
●
networking, shortest path;
●
interfaccia display manager (gis.m) e nviz;
●
integrazione con DBMS.
Il codice dei moduli e delle librerie vettoriali è stato riscritto
completamente rispetto alle versioni precedenti (5 e 4).
Paolo Zatelli | Università di Trento |
2/28
Gestione
Gestione di
di dati
dati vettoriali
vettoriali in
in GRASS
GRASS 6.4
6.4
GRASS 6.x
Geometria:
●
●
supporto per vettori 2D/3D (disegni CAD, TIN), visualizzazione con NVIZ;
multiformato - “mappe virtuali” da sorgenti di dati esterni (SHAPE-file,
PostGIS) senza conversione (con la libreria OGR con v.external);
●
export/import a/da PostGIS;
●
spatial index creato al volo - v.build velocizzato significativamente;
●
category index per accelerare le query sugli attributi.
Database Management Interface (attributi):
●
●
●
gestione degli attirbuti in un DBMS (PostgreSQL, mySQL, ODBC, SQLite,
dBase);
multiattributo - attributi registrati in file dBase(default) o in DBMS esterni;
multilayer – le features in un vettoriale possono rappresentare uno o più layer
e possono essere collegati a uno o più tabelle;
●
uso delle “forms library” per dialoghi user friendly per le query;
●
supporto per linear reference systems.
Paolo Zatelli | Università di Trento |
3/28
Gestione
Gestione di
di dati
dati vettoriali
vettoriali in
in GRASS
GRASS 6.4
6.4
GRASS 6.x
Applicazioni/Misc:
●
query/selezioni/estrazioni SQL supportate dai moduli vettoriali;
modifica interattiva degli attributi attraverso la “forms library” (d.what.vect
permette la modifica degli attributi);
●
analisi delle reti vettoriali: Shortest path, Traveling salesman (percorso chiuso),
Allocation of sources (sottoreti), Minimum Steiner trees (connessioni a stella), e
isodistances (da centri), (es. shortest path) - basato su DGLIB (Directed Graph
Library), le funzioni di costo possono essere assegnate sia a nodi che ad archi
(con verso);
●
●
nuovo programma di digitalizzazione v.digit con interfaccia grafica;
import e export di qualunque formato vettoriale supportato da OGR (Shapefile,
TIGER, MapInfo, GML2, PostGIS e DGN);
●
●
interfaccia grafica generata runtime e display manager;
i18n: supporto per linguaggi multipli (al momento i messaggi sono
parzialmente codificati e tradotti);
●
●
sessioni multiple di GRASS: lo stesso utente può lanciare più di una sessione.
Paolo Zatelli | Università di Trento |
4/28
Gestione
Gestione di
di dati
dati vettoriali
vettoriali in
in GRASS
GRASS 6.4
6.4
Geometria e attributi
Nel modello vettoriale si deve gestire:
● geometria;
● topologia;
● attributi;
e loro relazioni.
Le relazioni tra geometria ed attributi possono avere
cardinalità diversa da uno: è possibile cioè collegare più
attributi alla stessa geometria e/o geometrie diverse alla
stessa tabella di attributi.
Paolo Zatelli | Università di Trento |
5/28
Gestione
Gestione di
di dati
dati vettoriali
vettoriali in
in GRASS
GRASS 6.4
6.4
Geometria e attributi
fonte: GRASS wiki
Paolo Zatelli | Università di Trento |
6/28
Gestione
Gestione di
di dati
dati vettoriali
vettoriali in
in GRASS
GRASS 6.4
6.4
Geometria
La geometria del modello vettoriale in GRASS 6.x usa una
rappresentazione arco-nodo (arco = linea orientata) definita da
coppie [triplette] di coordinate (x,y[,z]).
Le primitive geometriche sono:
●point;
●line;
●boundary;
●centroid;
●area (boundary+centroid);
●face (riservato per usi futuri, topologia 3D?).
Paolo Zatelli | Università di Trento |
7/28
Gestione
Gestione di
di dati
dati vettoriali
vettoriali in
in GRASS
GRASS 6.4
6.4
Formati vettoriali
GRASS è in grado di utilizzare dati vettoriali 3D:
● in formato nativo (importati o digitalizzati);
● da PostGIS e in formati nativi attraverso OGR (sola lettura,
non topologico) con v.external.
Il modello vettoriale di GRASS prevede due livelli:
● livello 1, solo geometria (memorizzata nel file coor);
● livello 2, livello 1 più topologia (memorizzata nel file topo).
Le funzioni di GRASS possono aprire un file vettoriale a diversi
livelli a seconda delle operazioni che devono eseguire (che usano
o meno la topologia).
Paolo Zatelli | Università di Trento |
8/28
Gestione
Gestione di
di dati
dati vettoriali
vettoriali in
in GRASS
GRASS 6.4
6.4
Formato nativo
Nella directory $LOCATION_NAME/$MAPSET/vector esiste una
cartella per ogni vettoriale (con il nome della mappa), contenente i
file:
cidx
coor
dbln
head
hist
sidx
topo
file di indicizzazione delle categorie (binario);
coordinate (binario);
database link (lista delle tabelle associate, ASCII);
header (ASCII);
informazioni sul file (ASCII);
file di indicizzazione spaziale (binario);
topologia (binario).
Paolo Zatelli | Università di Trento |
9/28
Gestione
Gestione di
di dati
dati vettoriali
vettoriali in
in GRASS
GRASS 6.4
6.4
Formato nativo
header
ORGANIZATION: USGS­NMD DLG DATA ­ CHARACTE
DIGIT DATE: 1977,
DIGIT NAME: youngs
MAP NAME: Output from Vpatch
MAP DATE: 1977,
MAP SCALE: 100000
OTHER INFO: RC3.HYS03 **PRODUCED
ZONE: 13
MAP THRESH: 76.200000
dbln
1 poi cat /home/paolo/grass/network_analysis/osnabrueck/user1/dbf/ dbf
2 poi2 cat /home/paolo/grass/network_analysis/osnabrueck/user1/dbf/ dbf
hist
COMMAND: v.in.ogr ­o dsn="/home/paolo/grass/network_analysis/frida­1.0.1­
shp/" output="poi" layer="poi" min_area=0.0001 snap=­1
GISDBASE: /home/paolo/grass/network_analysis
LOCATION: osnabrueck MAPSET: user1 USER: paolo DATE: Thu Jun 9 13:07:15 200
Paolo Zatelli | Università di Trento |
10/28
Gestione
Gestione di
di dati
dati vettoriali
vettoriali in
in GRASS
GRASS 6.4
6.4
Formati esterni
E' possibile utilizzare dati vettoriali esterni con v.external
v.external dsn=/home/paolo/grass/trentino/dati/shp/ output=strade layer=strade
i file sono solo in lettura.
I formati supportati sono: ESRI Shapefile, MapInfo File, UK .NTF,
SDTS, TIGER, S57, DGN, VRT, REC, Memory, BNA, CSV,
GML,GPX, KML, GeoJSON, Interlis1, Interlis2, GMT, SQLite,
ODBC, Pgeo, OGDI, PostgreSQL, MySQL e AVCBin .
Paolo Zatelli | Università di Trento |
11/28
Gestione
Gestione di
di dati
dati vettoriali
vettoriali in
in GRASS
GRASS 6.4
6.4
Categorie
Ad ogni entità di un file vettoriale è associata una categoria,
che viene usata come campo chiave nel collegamento con gli
attributi.
Ogni vettoriale può appartenere ad uno o più layer (strati) ed
ogni entità ha una categoria (uguale o diversa) per ogni layer.
Ad ogni layer corrisponde una tabella del database.
Ogni vettoriale (ad es. importato) ha di default un layer (con
indice 1).
Paolo Zatelli | Università di Trento |
12/28
Gestione
Gestione di
di dati
dati vettoriali
vettoriali in
in GRASS
GRASS 6.4
6.4
Categorie e DB - formato nativo
Coor file
Primitiva geom. layer cat
linea 1
1
1
2
1
linea 2
1
2
2 23
punto 1
1
3
2
2
linea 3
1
1
2 23
Paolo Zatelli | Università di Trento |
Tabella 1
campo chiave
1
2
3
4
...
attributo
attributo 1
attributo 2
attributo 3
attributo 4
...
Tabella 2
campo chiave attributo
1
attributo 1
2
attributo 2
...
...
23
attributo 23
...
...
layer 1
layer 2
13/28
Gestione
Gestione di
di dati
dati vettoriali
vettoriali in
in GRASS
GRASS 6.4
6.4
Categorie e DB - PostGIS
layer 1
Geometry table
Prim. geom.
Feature ID
linea 1
1
linea 2
2
punto 1
3
linea 3
4
Category file
Feature ID layer cat
1
1
1
1
2
1
2
1
2
2
2 23
3
1
3
3
2
2
4
1
1
4
2 23
Tabella 1
campo chiave
1
2
3
4
...
attributo
attributo 1
attributo 2
attributo 3
attributo 4
...
Tabella 2
campo chiave attributo
1
attributo 1
2
attributo 2
...
...
23
attributo 23
...
...
layer 2
Paolo Zatelli | Università di Trento |
14/28
Gestione
Gestione di
di dati
dati vettoriali
vettoriali in
in GRASS
GRASS 6.4
6.4
Categorie
La gestione del legame geometria – categorie è fatta con v.category.
La sintassi è:
v.category [-g] input=name [output=name] [option=string] [type=string[,string,...]]
[layer=value[,value,...]] [ids=range] [cat=integer] [step=integer] [--overwrite] [-verbose] [--quiet]
flags: -g output in stile shell script, -o sovrascrive la mappa di output (se esiste),
-v verbose, -q quiet;
input nome della mappa di input;
output nome della mappa di output;
option azione da compiere:
add – aggiunge una nuovo layer, del – cancella un layer, lcopy – copia un
layer, chlayer – cambia il numero di un layer, sum – aggiunge il valore cat ai
valori di una categoria di un layer, report – visualizza i valori delle categorie in
shell style (layer type count min max), print - visualizza i valori delle categorie,
le categorie sono separate da '/';
type tipo di primitiva (point,linea,boundary,centroid,area);
layer numero del layer (default 1);
Ids categorie delle primitive nel file di input da processare (default: tutte);
cat categoria (default 1);
step incremento delle categorie (default 1);
overwrite sovrascrive il file di output, se esiste già (equivalente a -o).
Paolo Zatelli | Università di Trento |
15/28
Gestione
Gestione di
di dati
dati vettoriali
vettoriali in
in GRASS
GRASS 6.4
6.4
Categorie
Esempi:
aggiunge un secondo layer al vettoriale poi, con categoria=numero entità
v.category input=poi output=poi_2f layer=2 op=add cat=1 step=1
mentre
v.category input=poi_2f layer=1 op=report
visualizza
type count min max
point 282 1 282
line 0 0 0
boundary 0 0 0
centroid 0 0 0
area 0 0 0
all 282 1 282
LAYER 2:
type count min max
point 282 1 282
line 0 0 0
boundary 0 0 0
centroid 0 0 0
area 0 0 0
all 282 1 282
Paolo Zatelli | Università di Trento |
16/28
Gestione
Gestione di
di dati
dati vettoriali
vettoriali in
in GRASS
GRASS 6.4
6.4
Topologia
La costruzione della topologia è fatta con v.build, che gestisce i file
di supporto per topologia e categorie.
Normalmente non è necessario eseguire il modulo esplicitamente,
tutti i moduli di importazione e modifica di mappe vettoriali
eseguono v.build se necessario.
La sintassi è:
v.build map=name [error=name] [option=string[,string,...]] [--overwrite] [--verbose]
[--quiet]
map nome della mappa di input;
error mappa in cui scrivere i vettori errati;
option azione da compiere:
build – costruisce la topologia, dump – visualizza la topologia sullo stdout,
sdump – visualizza l'indice spaziale sullo stdout, cdump – visualizza le
categorie sullo stdout;
overwrite sovrascrive il file di output (error), se esiste già:
verbose aumenta le informazioni a video;
quiet diminuisce l'output a video.
Paolo Zatelli | Università di Trento |
17/28
Gestione
Gestione di
di dati
dati vettoriali
vettoriali in
in GRASS
GRASS 6.4
6.4
Topologia
Esempio: visualizzazione della topologia
v.build map=h_network_clean option=dump ­­­­­­­­­­ TOPOLOGY DUMP ­­­­­­­­­­
N,S,E,W,T,B: 5800876.470000, 5787594.240000, 3444004.000000, 3427000.290000, 0.000000, 0.000000
Nodes (9061 nodes, alive + dead ):
node = 1, n_lines = 2, xy = 3432560.200000, 5795535.790000
line = 1, type = 1, angle = ­9.000000
line = 10, type = 2, angle = 1.083750
node = 2, n_lines = 2, xy = 3432093.960000, 5795823.350000
line = 2, type = 1, angle = ­9.000000
line = 11, type = 2, angle = 0.822250
...
Paolo Zatelli | Università di Trento |
18/28
Gestione
Gestione di
di dati
dati vettoriali
vettoriali in
in GRASS
GRASS 6.4
6.4
Topologia
Spesso le mappe vettoriali importate hanno errori topologici, non
rispettano cioè i vincoli dello schema spaziale usato da GRASS
(G1).
I vincoli in particolare sono, per le primitive nella stessa mappa:
le aree non si possono sovrapporre, le linee intersecandosi
devono generare un nodo, punti diversi devono avere coordinate
diverse.
Alcuni formati di file vettoriali non contengono la topologia (es.
Shape e dxf) e le primitive hanno geometra tale che è necessario
“ripulirla” per costruire la topologia.
Dopo avere importato la mappa in GRASS si usa v.clean
Paolo Zatelli | Università di Trento |
19/28
Gestione
Gestione di
di dati
dati vettoriali
vettoriali in
in GRASS
GRASS 6.4
6.4
Topologia
v.clean [-b] input=name output=name [type=string[,string,...]] [error=name]
tool=string[,string,...] [thresh=float[,float,...]] [--overwrite] [--verbose] [--quiet]
Flags: -b non costruisce la topologia sul file di output, -o sovrascrive, -v verbose, -q
quiet.
input mappa di input;
output mappa di output;
type tipo di primitiva (point,line,boundary,centroid,area, face, kernel - default:
point,line,boundary,centroid,area);
error mappa (vettoriale) in cui sono create le primitive errate;
tool “strumento” da applicare : break, snap, rmdangle, chdangle, rmbridge, chbridge,
rmdupl,rmdac, bpol, prune, rmarea, rmline, rmsa
break: spezza le linee alle intersezioni
snap: esegue uno snap dei vertici delle linee più vicini del threshold
rmdangle: rimmuove i “dangles”, il threshold è ignorato se < 0
chdangle: cambia il tipo di primitiva da boundary a linea per i “dangle”, il
threshold è ignorato se < 0, le primitivedi tipo line sono ignorate
rmbridge: rimuove i “ponti” che connettono aree con isole o 2 isole
Paolo Zatelli | Università di Trento |
20/28
Gestione
Gestione di
di dati
dati vettoriali
vettoriali in
in GRASS
GRASS 6.4
6.4
Topologia
chbridge: cambia il tipo di primitiva da boundary a line per i “ponti” che
connettono aree con isole o 2 isole
rmdupl: rimuove le features duplicate (attenzione alle categorie)
rmdac: rimuove i centroidi duplicati ('type' è ignorato)
bpol: spezza (“aggiusta” topologicamente) i poligoni (ad es. importato da
formati non topologici come ShapeFile). I boundaries sono spezzati ad
ogni intersezione tra 2 o più poligoni
prune: rimuove i vertici all'interno del threshold da lines e boundaries, un
boundary è “potato” solo se la topologia non viene danneggiata (ad es.
creando una nuova intersezione), il primo e l'ultimo segmento di un
boundary non sono mai modificati.
rmarea: rimuove piccole aree, il boundary più lungo è cancellato
rmline: rimuove tutte le linee o boundary con lunghezza zero (ignora il
threshold)
rmsa: rimuove angoli piccoli tra linee nello stesso nodo
thresh threshold (valore di soglia)
Il threshold è dato in unità di mappa, un valore per ogni “strumento”, nello stesso
ordine (default: 0.0[,0.0,...]).
Paolo Zatelli | Università di Trento |
21/28
Gestione
Gestione di
di dati
dati vettoriali
vettoriali in
in GRASS
GRASS 6.4
6.4
Topologia
Esempio: spezzare le linee alle intersezioni
v.clean ­­overwrite ­­verbose input=roadsmajor output=roadsmajor_clean error=intersections tool=break
Esempio: rimuovere i centroidi duplicati
v.clean ­­overwrite ­­verbose input=census output=census_clean tool=rmdac
Esempio: rimuovere i “dangles” e unire i punti più vicini di 10 (metri)
v.clean ­­overwrite ­­verbose input=roads output=roads_clean tool=snap,rmdangle thresh=10
Paolo Zatelli | Università di Trento |
22/28
Gestione
Gestione di
di dati
dati vettoriali
vettoriali in
in GRASS
GRASS 6.4
6.4
Attributi
Ogni layer può essere collegato ad una tabella, si deve indicare:
● il layer a cui collegare la tabella;
● la tabella da collegare;
● il campo (colonna) chiave della tabella a cui corrispondono le
categorie delle primitive vettoriali.
Queste informazioni vengono memorizzate nel file dbln per ogni
vettoriale:
1 poi cat /home/paolo/grass/network_analysis/osnabrueck/user1/dbf/ dbf
2 poi2 cat /home/paolo/grass/network_analysis/osnabrueck/user1/dbf/ dbf
Attenzione: è possibile collegare la stessa tabella a più vettoriali
ma le operazioni su un vettoriale la modificano anche per gli
altri, in particolare cancellando un vettoriale collegato la tabella
viene cancellata (ma si può scollegare la tabella).
Paolo Zatelli | Università di Trento |
23/28
Gestione
Gestione di
di dati
dati vettoriali
vettoriali in
in GRASS
GRASS 6.4
6.4
Collegamento degli attributi
Il collegamento tra categorie su un layer e tabella di DB si imposta
con v.db.connect.
La sintassi è:
v.db.connect [-pglcod] map=name [driver=name] [database=name]
[table=name] [key=name] [layer=integer] [fs=character] [--verbose] [--quiet]
flags: -p stampa i parametri della connessione attuale ed esce;
-g stampa i parametri della connessione attuale in stile shell script ed esce;
-l stampa solo informazioni relative al layer indicato
-c stampa i nomi e tipi delle colonne del layer specificato;
-o sovrascrive i parametri di una connessione esistente;
-d elimina la connessione specificata (non la tabella);
map nome della mappa di input;
driver driver del DB (dbf, pg, ogr, sqlite – default dbf);
database nome del database (directory per i file);
table tabella;
key nome del campo (colonna) chiave;
layer numero del layer (default 1);
fs separatore dei campi nella tabella.
Paolo Zatelli | Università di Trento |
24/28
Gestione
Gestione di
di dati
dati vettoriali
vettoriali in
in GRASS
GRASS 6.4
6.4
v.db.connect
Esempi:
collegare la tabella “strassen” (dbf) al primo layer del vettore
“streets_schools” con campo chiave “cat”
v.db.connect map=streets_schools driver=dbf database=$GISDBASE/
$LOCATION_NAME/$MAPSET/dbf/ table=strassen key=cat layer=1
collegare la tabella “schools” (dbf) al secondo layer del vettore
“streets_schools” con campo chiave “cat”
v.db.connect map=streets_schools driver=dbf database=$GISDBASE/
$LOCATION_NAME/$MAPSET/dbf/ table=schools key=cat layer=2
collegare la tabella “streets” (PostgreSQL) al terzo layer del
vettore “streets_schools” con campo chiave “cat”
v.db.connect map=streets_schools driver=pg database=”host=pgserver.ing.unitn.it,dbname=vectdb,user=paolo” table=streets key=id layer=3
Paolo Zatelli | Università di Trento |
25/28
Gestione
Gestione di
di dati
dati vettoriali
vettoriali in
in GRASS
GRASS 6.4
6.4
db.connect
E' possibile impostare parametri di default per la connessione a DB
con db.connect, questi sono usati da v.db.connect senza bisogno
di specificarli ogni volta.
La sintassi è:
db.connect [-pc] [driver=string] [database=string] [schema=string] [group=string]
flags: -p visualizza i parametri della connessione corrente ed esce, -c controlla I
parametri della connessione e li imposta;
driver nome deldriver DB (dbf,pg,sqlite);
database nome del database (directory per i file);
schema tipo di schema usato dal server DB (vuoto per i DBMS che non usano
uno schema);
group utente di default del server DB.
Es.: impostazione di default per driver e database per i dbf
db.connect driver=dbf database=$GISDBASE/$LOCATION_NAME/$MAPSET/dbf/
Paolo Zatelli | Università di Trento |
26/28
Gestione
Gestione di
di dati
dati vettoriali
vettoriali in
in GRASS
GRASS 6.4
6.4
Esempi
Visualizzazione di un vettoriale:
d.vect strade_scuole col=black
i punti (=scuole) in rosso, estraendo le etichette dalla colonna
“tipo” della tabella collegata sul layer 2:
d.vect strade_scuole type=point layer=2 llayer=2 col=red disp=attr attrcol=tipo
Creazione del vettoriale “scuole” estraendo da “servizi” i punti con
nome “scuola” nella colonna “tipo”
v.extract input=servizi output=scuole type=point layer=1 new=­1 where=”tipo='Scuola'"
Paolo Zatelli | Università di Trento |
27/28
Gestione
Gestione di
di dati
dati vettoriali
vettoriali in
in GRASS
GRASS 6.4
6.4
Licenza
Questa presentazione è © 2014 Paolo Zatelli, disponibile come
Paolo Zatelli | Università di Trento |
28/28