Analisi di reti con GRASS

Transcript

Analisi di reti con GRASS
Analisi
Analisi di
di reti
reti con
con GRASS
GRASS
Analisi di reti con GRASS
Paolo Zatelli
Dipartimento di Ingegneria Civile e Ambientale
Università di Trento
Paolo Zatelli | Università di Trento |
1/31
Analisi
Analisi di
di reti
reti con
con GRASS
GRASS
Problemi legati ad una rete
Le domande che ci si può porre rispetto ad una rete (insieme di
linee connesse) è:
●
●
●
●
●
quale è il percorso più breve tra due punti (nodi)?
è possibile calcolare zone equidistanti (lungo la rete) da punti
(nodi) dati?
si può dividere la rete in sottoreti di elementi più vicini a punti
(nodi) dati?
è possibile determinare la sottorete di lunghezza minima che
connette un set di punti (nodi) dati (alberi di Steiner)?
si può calcolare il percorso più breve che passa per tutti i punti
(nodi) dati una sola volta (problema del commesso viaggiatore)?
Paolo Zatelli | Università di Trento |
2/31
Analisi
Analisi di
di reti
reti con
con GRASS
GRASS
Metrica sulla rete
Le domande sono poste in termini di distanza ma andrebbero
poste in termini di costo di percorrenza dei tratti e di
attraversamento dei nodi.
Ad esempio:
●
●
la stessa distanza fisica su tipi di strade diverse (velocità diversa) può
avere un costo significativamente diverso per il calcolo del tempo di
percorrenza, così come la presenza di restringimenti e deviazioni sui nodi;
per una rete di acquedotto il tipo e diametro dei tubi influenza la perdita di
carico (il costo di attraversamento), perdita che può essere anche
concentrata su saracinesche e giunzioni (nodi).
Paolo Zatelli | Università di Trento |
3/31
Analisi
Analisi di
di reti
reti con
con GRASS
GRASS
Metrica sulla rete
La distanza fisica deve essere sostituita da un costo, cioè la
distanza modificata secondo una metrica (velocità massima,
diametro dei tubi, ecc.).
Per i tratti il costo può essere dato in modo assoluto oppure per
unità di lunghezza, il costo viene cioè moltiplicato per la
lunghezza fisica del tratto.
Ad es. il tempo di percorrenza su una strada è pari alla velocità
media moltiplicata per la distanza percorsa.
Paolo Zatelli | Università di Trento |
4/31
Analisi
Analisi di
di reti
reti con
con GRASS
GRASS
Teoria dei grafi
L'analisi delle reti è basata sulla teoria dei grafi.
Un grafo consiste in un insieme finito di connessioni logiche tra
oggetti (detti vertici). I vertici sono rappresentati da nodi e i
collegamenti da archi (linee con verso).
GRASS per l'analisi delle reti utilizza la libreria DGLib (Directed
Graph Library) scritta da Roberto Micarelli.
E' possibile assegnare un costo diverso ad ogni nodo e ad
ogni linea e ad ogni verso di percorrenza.
Paolo Zatelli | Università di Trento |
5/31
Analisi
Analisi di
di reti
reti con
con GRASS
GRASS
Dati necessari
Per fare analisi di una rete si deve disporre di:
●
●
una mappa vettoriale con linee e punti (connessi o meno
alla rete);
uno o più tabelle di DB contenenti i costi collegati agli
elementi della mappa (linee e nodi), se i costi non sono
disponibili si può usare solo la distanza.
Paolo Zatelli | Università di Trento |
6/31
Analisi
Analisi di
di reti
reti con
con GRASS
GRASS
Collegamenti di punti ad una rete
Un insieme di punti può essere collegato ad una rete di archi in
due passaggi:
0. creazione degli archi di collegamento tra rete e punti;
1. unione delle 3 mappe vettoriali che contengono rispettivamente
gli archi, i punti e i collegamenti.
I collegamenti si possono disegnare manualmente con v.digit,
tracciare automaticamente con v.distance, che permette di
determinare linee da un vettoriale ad un altro con diversi criteri
(uguale categoria, minima distanza, elementi di uguale x o y,
minima distanza lungo una linea e minima distanza in una
direzione data) e uniti con v.patch, oppure creati e uniti
automaticamente con v.net.
I moduli di GRASS possono usare punti al di fuori della rete, che
vengono connessi alla rete con il segmento di minore lunghezza
(che è visualizzata).
Paolo Zatelli | Università di Trento |
7/31
Analisi
Analisi di
di reti
reti con
con GRASS
GRASS
Moduli di GRASS
I moduli di GRASS per l'analisi delle reti sono:
● v.net – prepara la rete per l'applicazione dei moduli successivi;
● d.path – calcola e visualizza il percorso minimo tra nodi individuati
con il mouse sul display in modo interattivo;
● v.net.path – come il precedente ma in modo non interattivo;
● v.net.iso – suddivide la rete in aree ad uguale costo lungo la rete
attorno a punti (nodi) della rete indicati in input;
● v.net.alloc – crea (alloca) sottoreti che corrispondono alle parti di
reti più vicine a ciascun punto (nodo) indicato in input;
● v.net.steiner – crea l'albero di Steiner (rete di minima lunghezza
che connette i nodi dati) per una data rete e un set di punti (nodi)
della rete;
● v.net.salesman – risolve il “problema del commesso viaggiatore”
(salesman) individuando il percorso più breve che passa una sola
volta per i punti (nodi) della rete dati.
Paolo Zatelli | Università di Trento |
8/31
Analisi
Analisi di
di reti
reti con
con GRASS
GRASS
Moduli di GRASS
Altri moduli di GRASS per l'analisi delle rete:
● v.net.bridge – trova i bridge e i punti di articolazione della rete;
● v.net.connectivity – calcola la connettività (numero minimo di punti
che rimosso separa i punti dati) tra due insiemi di nodi;
● v.net.spanningtree – determina la sottorete di lunghezza minima
che congiunge tutti i nodi;
● v.net.visibility – crea il grafo di visibilità (l'insieme dei punti “visibili”
per i quali lo spigolo che li unisce non interseca alcun segmento);
● v.net.centrality – crea (alloca) sottoreti che corrispondono alle parti
di reti più vicine a ciascun punto (nodo) indicato in input;
● v.net.steiner
– calcola per ogni nodo grado, centralità,
intermediatezza, vicinanza e autovalori della centralità (e salva in
tabella);
● v.net.distance – calcola la distanza minima lungo la rete tra due
insiemi e salva in una tabella distanza e attributi.
Paolo Zatelli | Università di Trento |
9/31
Analisi
Analisi di
di reti
reti con
con GRASS
GRASS
Moduli di GRASS
Altri moduli di GRASS per l'analisi delle rete:
● v.net.allpairs – trova i percorsi minimi tra tutte le coppie di nodi
sulla rete;
● v.net.components
– individua le componenti fortemente (nodi
connessi nelle due direzioni) e debolmente (nodi connessi in una
sola direzione) connesse alla rete;
● v.net.flow – calcola il “flusso” massimo sulla rete tra due insiemi di
nodi in base alla capacità assegnata agli spigoli e crea una tabella
con il flusso in ogni spigolo;
● v.net.timetable – calcola il percorso minimo tra due punti usando
tabelle orarie (compresi cambi e percorsi a piedi tra fermate);
Paolo Zatelli | Università di Trento |
10/31
Analisi
Analisi di
di reti
reti con
con GRASS
GRASS
Caratteristiche comuni ai moduli
Alcune caratteristiche, che derivano dall'implementazione della
DGLib, sono comuni a tutti i moduli:
● se non si assegna un costo a nodi e archi si usa la distanza;
● è possibile assegnare costi diversi ai due versi di percorrenza
degli archi (linee orientate, d.vect mappa display=shape,dir);
● un costo pari a -1 indica che il tratto è bloccato e non viene
considerato nell'analisi della rete;
● è possibile assegnare costo -1 ad un solo verso di percorrenza
bloccandolo, l'arco è percorribile nell'altro verso (sensi unici);
● nella
implementazione attuale della DGLib i costi possono
essere dati solo con colonne del DB di tipo int (ma è il rapporto
fra i pesi ad essere determinante);
● i moduli non sovrascrivono mappe esistenti, è necessario
specificare l'opzione -- overwrite oppure cancellarle prima.
Paolo Zatelli | Università di Trento |
11/31
Analisi
Analisi di
di reti
reti con
con GRASS
GRASS
v.net
prepara la mappa per l'analisi di reti
La sintassi è:
v.net [-c] input=name [points=name] [output=name] [operation=string]
[alayer=value] [nlayer=value] [thresh=value] [--overwrite] [--verbose] [--quiet]
flags: -c assegna categorie uniche ai punti creati;
input nome della mappa di input (linee della rete);
points nome della mappa di input dei punti (da collegare attraverso la rete);
output nome della mappa di output (rete=linee+punti);
operation operazione da effettuare (nodes,connect,report,nreport, default nodes):
nodes: un nuovo punto è creato ad ogni estremità delle linee (se non esiste);
connect: connette i punti non connessi alla rete creando nuove linee;
report: visualizza sullo standard output {line_category start_point_category
end_point_category}
nreport: visualizza sullo standard output {point_category
line_category[,line_category...]}
alayer layer degli archi;
nlayer layer dei nodi;
tresh soglia della distanza punto – rete entro cui i punti sono connessi.
Paolo Zatelli | Università di Trento |
12/31
Analisi
Analisi di
di reti
reti con
con GRASS
GRASS
d.path
calcola e visualizza il percorso minimo tra nodi individuati con il mouse su un
display.
La sintassi è:
d.path [-gbu] map=name [type=string[,string,...]] [coor=x1,y1,x2,y2]
[alayer=value]
[nlayer=value]
[afcol=string]
[abcol=string]
[ncol=string]
[color=string] [hcolor=string] [bgcolor=string] [--verbose] [--quiet]
flags: -g usa distanze geodetiche per location in longitudine-latitudine;
-b evidenzia i percorsi con tratti spessi (bold);
-u costi sugli archi per unità di lunghezza (sono moltiplicati per la distanza);
map nome della mappa di input;
type tipo di arco (line, boundary);
coor coordinate dei punti di partenza e di arrivo;
alayer layer degli archi;
nlayer layer dei nodi;
afcol colonna dei costi in avanti (nel verso dell'arco) per gli archi;
abcol colonna dei costi in dietro (contrari al verso dell'arco) per gli archi;
ncol colonna dei costi dei nodi;
color colore con cui viene disegnata la rete nel file di input (default nero);
hcolor colore con cui viene evidenziato il percorso individuato (default rosso);
bgcolor colore dello sfondo (default bianco).
Paolo Zatelli | Università di Trento |
13/31
Analisi
Analisi di
di reti
reti con
con GRASS
GRASS
d.path
Esempi, sullo spearfish:
minimo percorso tra due nodi con costo=distanza:
d.path map=roads type=line,boundary alayer=1 color=black hcolor=red
bgcolor=white
minimo percorso tra due nodi con costi assegnati nelle colonne c_avanti (costi nel verso
dell'arco) e c_indietro (costi in senso contrario) della tabella associata al layer 1:
d.path
map=roads
type=line,boundary
alayer=1
afcol=c_avanti
abcol=c_indietro color=black hcolor=red bgcolor=white
come sopra, ma i costi nelle colonne c_avanti e c_indietro sono per unità di lunghezza
(GRASS 6.1):
d.path
map=roads
type=line,boundary
alayer=1
afcol=c_avanti
abcol=c_indietro color=black hcolor=red bgcolor=white -u
minimo percorso tra due nodi con costi assegnati nelle colonne c_avanti (costi nel verso
dell'arco) e c_indietro (costi in senso contrario) della tabella associata al layer 1 e costi sui
nodi assegnati nella colonna costo_nodo della tabella associata al layer 2:
d.path
map=roads
type=line,boundary
alayer=1
afcol=c_avanti
abcol=c_indietro nlayer=2 ncol=costo_nodo color=black hcolor=red
bgcolor=white
Paolo Zatelli | Università di Trento |
14/31
Analisi
Analisi di
di reti
reti con
con GRASS
GRASS
d.path
Percorso minimo tra due
punti, peso = distanza.
Paolo Zatelli | Università di Trento |
15/31
Analisi
Analisi di
di reti
reti con
con GRASS
GRASS
v.net.path
calcola e salva in un file vettoriale il percorso minimo tra nodi individuati da tastiera.
La sintassi è:
v.net.path [-gs] input=name output=name [type=string[,string,...]] [alayer=value]
[nlayer=value] [file=name] [afcolumn=string] [abcolumn=string] [ncolumn=string]
[dmax=value] [--overwrite] [--verbose] [--quiet]
flags: -g usa distanze geodetiche per location in longitudine-latitudine;
-s scrive in output i segmenti che compongono il percorso senza unirli in una
unica linea;
-u costi sugli archi per unità di lunghezza (sono moltiplicati per la distanza);
input nome della mappa di input;
output nome della mappa di output;
type tipo di arco (linea e/o boundary);
alayer layer degli archi;
nlayer layer dei nodi;
file file contente i punti di partenza e arrivo (se non dato vengono letti dallo stdin);
afcolumn colonna dei costi in avanti (nel verso dell'arco) per gli archi;
abcolumn colonna dei costi in dietro (contrari al verso dell'arco) per gli archi;
ncolumn colonna dei costi dei nodi;
dmax massima distanza dalla rete per i punti di partenza/arrivo, per punti più
lontani il percorso non viene calcolato (default 1000).
Paolo Zatelli | Università di Trento |
16/31
Analisi
Analisi di
di reti
reti con
con GRASS
GRASS
v.net.path
I punti di partenza e arrivo sono dati dallo standard input (tastiera o reindirizzato
da file) in due modi:
nlayer categoria_punto_partenza_1 categoria_punto_arrivo_1
nlayer categoria_punto_partenza_2 categoria_punto_arrivo_2
...
oppure
nlayer x_punto_partenza_1 y_punto_partenza_1 x_punto_arrivo_1 y_punto_arrivo_1
nlayer x_punto_partenza_2 y_punto_partenza_2 x_punto_arrivo_2 y_punto_arrivo_2
...
le coordinate x e y sono ovviamente Est e Nord o  e  ecc. nelle location non
xy.
Ci sono diversi modi per passare questo input a v.net.path: interattivamente
lanciando ad es. v.net.path in=roads_net out=schools_path_201_204
(costo=distanza) e inserendo sul teminale
1 201 204
1 204 209
...
^D
control-D su una riga vuota termina l'input e fa eseguire il modulo.
Paolo Zatelli | Università di Trento |
17/31
Analisi
Analisi di
di reti
reti con
con GRASS
GRASS
v.net.path
Vengono calcolati i percorsi minimi dal nodo 201 al 204 e dal 204 al
209. I file di output ha due polilinee con due categorie diverse a cui
è associato un DB del tipo:
Layer: 1
category: 1
driver: dbf
database: /home/paolo/grass/network_analysis/osnabrueck/user1/dbf/
table: schools_path_201_204
key column: cat
cat : 1
id : 1
fcat : 201
tcat : 204
sp : 0
cost : 992.801000
fdist : 0.000000
tdist : 0.000000
Paolo Zatelli | Università di Trento |
18/31
Analisi
Analisi di
di reti
reti con
con GRASS
GRASS
v.net.path
Paolo Zatelli | Università di Trento |
19/31
Analisi
Analisi di
di reti
reti con
con GRASS
GRASS
v.net.path
Altri modi per passare a v.net.path i punti di arrivo e partenza dei percorsi
minimi sono:
echo "1 201 204"|v.net.path in=schools_net out=schools_path_201_204
oppure
v.net.path in=schools_net out=schools_path_201_204<lista_nodi.txt
oppure
v.net.path in=schools_net out=schools_path_201_204 file=lista_nodi.txt
dove lista_nodi.txt è un file di testo che contiene la sequenza dei nodi, ad es.:
1 201 204
1 204 209
Paolo Zatelli | Università di Trento |
20/31
Analisi
Analisi di
di reti
reti con
con GRASS
GRASS
v.net.iso
suddivide la rete in aree ad uguale costo attorno a nodi della rete indicati in input.
La sintassi è:
v.net.iso [-gu] input=name output=name [type=string[,string,...]] [alayer=value]
[nlayer=value]
[afcolumn=name]
[abcolumn=name]
[ncolumn=name]
ccats=range costs=value[,value,...] [--overwrite] [--verbose] [--quiet]
flags: -g usa distanze geodetiche per location in longitudine-latitudine;
-u costi sugli archi per unità di lunghezza (sono moltiplicati per la distanza);
input nome della mappa di input;
output nome della mappa di output;
type tipo di arco (linea e/o boundary);
alayer layer degli archi;
nlayer layer dei nodi;
afcolumn colonna dei costi in avanti (nel verso dell'arco) per gli archi;
abcolumn colonna dei costi in dietro (contrari al verso dell'arco) per gli archi;
ncolumn colonna dei costi dei nodi;
ccats categorie (sul layer nlayer) dei nodi della rete per cui calcolare la aree di
uguale costo sulla rete;
costs costi sulla isolinee (valore del costo a cui cambia la categoria dell'area).
Paolo Zatelli | Università di Trento |
21/31
Analisi
Analisi di
di reti
reti con
con GRASS
GRASS
v.net.iso
Il file di output contiene la rete ai cui archi e nodi è attribuita una categoria pari alla
area (fascia attorno ai nodi) di costo a cui appartiene.
Ad esempio:
v.net.iso input=schools_net output=schools_iso type=line,boundary
alayer=1 nlayer=2 ccats=200-210 costs=1000,2500,5000,10000
individua 5 aree ad uguale costo (distanza in questo caso) attorno ai nodi di
categoria compresa tra 200 e 210 (201, 204 e 209 nella rete schools_net) di
distanza:
Categoria
1
2
3
4
5
Paolo Zatelli | Università di Trento |
distanza
<1000
1000-2000
2001-3000
3001-4000
4001-5000
22/31
Analisi
Analisi di
di reti
reti con
con GRASS
GRASS
v.net.iso
Paolo Zatelli | Università di Trento |
23/31
Analisi
Analisi di
di reti
reti con
con GRASS
GRASS
v.net.alloc
crea sottoreti che corrispondono alle parti di reti più vicine a ciascun nodo
indicato.
La sintassi è:
v.net.alloc [-gu] input=name output=name [type=string[,string,...]] [alayer=value]
[nlayer=value] [afcolumn=string] [abcolumn=string] [ncolumn=string] ccats=range
[--overwrite] [--verbose] [--quiet]
flags: -g usa distanze geodetiche per location in longitudine-latitudine;
-u costi sugli archi per unità di lunghezza (sono moltiplicati per la distanza);
input nome della mappa di input;
output nome della mappa di output;
type tipo di arco (linea e/o boundary);
alayer layer degli archi;
nlayer layer dei nodi;
afcolumn colonna dei costi in avanti (nel verso dell'arco) per gli archi;
abcolumn colonna dei costi in dietro (contrari al verso dell'arco) per gli archi;
ncolumn colonna dei costi dei nodi;
ccats categorie (sul layer nlayer) dei nodi della rete per cui calcolare le sottoaree.
Paolo Zatelli | Università di Trento |
24/31
Analisi
Analisi di
di reti
reti con
con GRASS
GRASS
v.net.alloc
La mappa di output contiene la rete ai cui archi e nodi è attribuita una categoria che
corrisponde al nodo la cui zona appartengono.
Ad esempio:
v.net.alloc input=schools_net output=schools_alloc type=line,boundary
alayer=1 nlayer=2 ccats=200-210
individua 1 area per ogni nodo di categoria compresa tra 200 e 210 (201, 204 e 209
nella rete schools_net).
Paolo Zatelli | Università di Trento |
25/31
Analisi
Analisi di
di reti
reti con
con GRASS
GRASS
v.net.alloc
Paolo Zatelli | Università di Trento |
26/31
Analisi
Analisi di
di reti
reti con
con GRASS
GRASS
v.net.steiner
crea l'albero di Steiner (rete di minima lunghezza che connette i nodi dati) per
una data rete e un set di nodi della rete.
La sintassi è:
v.net.steiner [-gu] input=name output=name [type=string[,string,...]] [alayer=value]
[nlayer=value] [acolumn=string] tcats=range [nsp=value] [--overwrite] [--verbose]
[--quiet]
flags: -g usa distanze geodetiche per location in longitudine-latitudine;
-u costi sugli archi per unità di lunghezza (sono moltiplicati per la distanza);
input nome della mappa di input;
output nome della mappa di output;
type tipo di arco (linea e/o boundary);
alayer layer degli archi;
nlayer layer dei nodi;
acolumn colonna dei costi (in entrambi i versi) per gli archi;
tcats categorie (sul layer nlayer) dei nodi della rete da collegare;
nsp numero di punti di Steiner (-1 per tutti i punti possibili, default).
Paolo Zatelli | Università di Trento |
27/31
Analisi
Analisi di
di reti
reti con
con GRASS
GRASS
v.net.steiner
Per determinare l'albero di Steiner si utilizza un approccio euristico, si
calcolano cioè tutte le reti possibili e si sceglie quella di lunghezza minima: per
questo motivo il modulo è lento.
Ad esempio
v.net.steiner
input=h_network_clean
output=broadband_map
type=line,boundary alayer=1 nlayer=1 tcats=40-300 nsp=-1
calcola la rete di lunghezza minima che collega tutti i nodi di categoria tra 40
e 300 sul layer 1.
Paolo Zatelli | Università di Trento |
28/31
Analisi
Analisi di
di reti
reti con
con GRASS
GRASS
v.net.steiner
Paolo Zatelli | Università di Trento |
29/31
Analisi
Analisi di
di reti
reti con
con GRASS
GRASS
v.net.salesman
risolve il “problema del commesso viaggiatore” (salesman) individuando il
percorso più breve che passa una sola volta per i punti (nodi) della rete dati.
La sintassi è:
v.net.salesman [-gu] input=name output=name [type=string[,string,...]]
[alayer=value] [nlayer=value] [acolumn=string] ccats=range [--overwrite]
[--verbose] [--quiet]
flags: -g usa distanze geodetiche per location in longitudine-latitudine;
-u costi sugli archi per unità di lunghezza (sono moltiplicati per la distanza);
input nome della mappa di input;
output nome della mappa di output;
type tipo di arco (linea e/o boundary);
alayer layer degli archi;
nlayer layer dei nodi;
acolumn colonna dei costi (in entrambi i versi) per gli archi;
ccats categorie (sul layer nlayer) dei nodi della rete da collegare.
Paolo Zatelli | Università di Trento |
30/31
Analisi
Analisi di
di reti
reti con
con GRASS
GRASS
v.net.salesman
Per determinare il percorso più breve si utilizza un approccio euristico, si
calcolano cioè tutti percorsi possibili e si sceglie quella di lunghezza minima:
per questo motivo il modulo è lento.
Ad esempio
v.net.salesman
input=h_network_clean
output=salesman
type=line,boundary alayer=1 nlayer=1 tcats=40-300
calcola il percorso di lunghezza minima che collega tutti i nodi di
categoria tra 40 e 300 sul layer 1 passando una volta sola su ogni nodo.
Paolo Zatelli | Università di Trento |
31/31
Analisi
Analisi di
di reti
reti con
con GRASS
GRASS
v.net.salesman
Paolo Zatelli | Università di Trento |
32/31
Analisi
Analisi di
di reti
reti con
con GRASS
GRASS
Licenza
Questa presentazione è © 2012 Paolo Zatelli, disponibile come
Paolo Zatelli | Università di Trento |
33/31