analisi di reti con grass - unitrentozatelli/cartografia_numerica/slides/analisi_reti... ·...

33
Analisi di reti con GRASS Analisi di reti con GRASS Paolo Zatelli | Università di Trento | 1/31 Analisi di reti con GRASS Paolo Zatelli Dipartimento di Ingegneria Civile e Ambientale Università di Trento

Upload: dinhanh

Post on 15-Feb-2019

224 views

Category:

Documents


1 download

TRANSCRIPT

Analisi di reti con GRASS Analisi di reti con GRASS

Paolo Zatelli | Università di Trento | 1/31

Analisi di reti con GRASS

Paolo ZatelliDipartimento di Ingegneria Civile e Ambientale

Università di Trento

Analisi di reti con GRASS Analisi di reti con GRASS

Paolo Zatelli | Università di Trento | 2/31

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)?

Problemi legati ad una rete

Analisi di reti con GRASS Analisi di reti con GRASS

Paolo Zatelli | Università di Trento | 3/31

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

Metrica sulla rete

Analisi di reti con GRASS Analisi di reti con GRASS

Paolo Zatelli | Università di Trento | 4/31

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.

Metrica sulla rete

Analisi di reti con GRASS Analisi di reti con GRASS

Paolo Zatelli | Università di Trento | 5/31

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.

Teoria dei grafi

Analisi di reti con GRASS Analisi di reti con GRASS

Paolo Zatelli | Università di Trento | 6/31

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.

Dati necessari

Analisi di reti con GRASS Analisi di reti con GRASS

Paolo Zatelli | Università di Trento | 7/31

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

Collegamenti di punti ad una rete

Analisi di reti con GRASS Analisi di reti con GRASS

Paolo Zatelli | Università di Trento | 8/31

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.

Moduli di GRASS

Analisi di reti con GRASS Analisi di reti con GRASS

Paolo Zatelli | Università di Trento | 9/31

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.

Moduli di GRASS

Analisi di reti con GRASS Analisi di reti con GRASS

Paolo Zatelli | Università di Trento | 10/31

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);

Moduli di GRASS

Analisi di reti con GRASS Analisi di reti con GRASS

Paolo Zatelli | Università di Trento | 11/31

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.

Caratteristiche comuni ai moduli

Analisi di reti con GRASS Analisi di reti con GRASS

Paolo Zatelli | Università di Trento | 12/31

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.

v.net

Analisi di reti con GRASS Analisi di reti con GRASS

Paolo Zatelli | Università di Trento | 13/31

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

d.path

Analisi di reti con GRASS Analisi di reti con GRASS

Paolo Zatelli | Università di Trento | 14/31

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

d.path

Analisi di reti con GRASS Analisi di reti con GRASS

Paolo Zatelli | Università di Trento | 15/31

Percorso minimo tra due punti, peso = distanza.

d.path

Analisi di reti con GRASS Analisi di reti con GRASS

Paolo Zatelli | Università di Trento | 16/31

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

v.net.path

Analisi di reti con GRASS Analisi di reti con GRASS

Paolo Zatelli | Università di Trento | 17/31

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_1nlayer categoria_punto_partenza_2 categoria_punto_arrivo_2...

oppurenlayer x_punto_partenza_1 y_punto_partenza_1 x_punto_arrivo_1 y_punto_arrivo_1nlayer 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 teminale1 201 2041 204 209...^Dcontrol-D su una riga vuota termina l'input e fa eseguire il modulo.

v.net.path

Analisi di reti con GRASS Analisi di reti con GRASS

Paolo Zatelli | Università di Trento | 18/31

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: 1category: 1driver: dbfdatabase: /home/paolo/grass/network_analysis/osnabrueck/user1/dbf/table: schools_path_201_204key column: catcat : 1 id : 1 fcat : 201 tcat : 204 sp : 0 cost : 992.801000 fdist : 0.000000 tdist : 0.000000

v.net.path

Analisi di reti con GRASS Analisi di reti con GRASS

Paolo Zatelli | Università di Trento | 19/31

v.net.path

Analisi di reti con GRASS Analisi di reti con GRASS

Paolo Zatelli | Università di Trento | 20/31

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 2041 204 209

v.net.path

Analisi di reti con GRASS Analisi di reti con GRASS

Paolo Zatelli | Università di Trento | 21/31

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

v.net.iso

Analisi di reti con GRASS Analisi di reti con GRASS

Paolo Zatelli | Università di Trento | 22/31

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:

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.

Categoria distanza1 <10002 1000-20003 2001-30004 3001-40005 4001-5000

v.net.iso

Analisi di reti con GRASS Analisi di reti con GRASS

Paolo Zatelli | Università di Trento | 23/31

v.net.iso

Analisi di reti con GRASS Analisi di reti con GRASS

Paolo Zatelli | Università di Trento | 24/31

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.

v.net.alloc

Analisi di reti con GRASS Analisi di reti con GRASS

Paolo Zatelli | Università di Trento | 25/31

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

v.net.alloc

Analisi di reti con GRASS Analisi di reti con GRASS

Paolo Zatelli | Università di Trento | 26/31

v.net.alloc

Analisi di reti con GRASS Analisi di reti con GRASS

Paolo Zatelli | Università di Trento | 27/31

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

v.net.steiner

Analisi di reti con GRASS Analisi di reti con GRASS

Paolo Zatelli | Università di Trento | 28/31

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.

v.net.steiner

Analisi di reti con GRASS Analisi di reti con GRASS

Paolo Zatelli | Università di Trento | 29/31

v.net.steiner

Analisi di reti con GRASS Analisi di reti con GRASS

Paolo Zatelli | Università di Trento | 30/31

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.

v.net.salesman

Analisi di reti con GRASS Analisi di reti con GRASS

Paolo Zatelli | Università di Trento | 31/31

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.

v.net.salesman

Analisi di reti con GRASS Analisi di reti con GRASS

Paolo Zatelli | Università di Trento | 32/31

v.net.salesman

Analisi di reti con GRASS Analisi di reti con GRASS

Paolo Zatelli | Università di Trento | 33/31

Licenza

Questa presentazione è © 2012 Paolo Zatelli, disponibile come