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