Preparazione dei dati

Per compiere un'analisi di una rete si deve disporre di:

La rete delle strade è già presente nel dataset Spearfish come file vettoriale roads ma, poichè sarà necessario modificarne la tabella, si deve copiare il vettoriale roads dal mapset PERMANENT (in sola lettura) nella mappa roads_fire nel mapset corrente (user1) con:

> g.copy vect=roads,roads_fire

Per quanto riguarda i punti, qui è possibile scaricare il file network_fire_points.tar.gz contenente un vettoriale in formato ESRI Shapefile con 4 punti relativi alle caserme dei pompieri e 3 punti relativi ad incendi (i dati sono fittizi e sono stati creati per questa esercitazione).

Dopo aver scaricato il file e averlo decompresso (tar xzvf network_fire_points.tar.gz), si imposta la regione su quella di default con

> g.region -d

si importa il file shape con

> v.in.ogr dsn=/directory/in/cui/si/scompatta/lo/shape/ output=fires layer=fires min_area=0.0001 snap=-1 -o

e si visualizza con

> d.mon start=x0 select=x0

> d.vect map=fires type=point,line,boundary,centroid,area,face display=shape,attr attrcol=type where="type='Wildfire'" icon=basic/x size=8 layer=1 color=red fcolor=gray llayer=1 lcolor=red bgcolor=none bcolor=none lsize=8 font=romans xref=left yref=center

> d.vect map=fires type=point,line,boundary,centroid,area,face display=shape,attr attrcol=type where="type='Fire station'" icon=basic/x size=8 layer=1 color=blue fcolor=gray llayer=1 lcolor=blue bgcolor=none bcolor=none lsize=8 font=romans xref=left yref=center


Visualizzazione delle caserme dei pompieri e degli punti d'incendio

Si puó interrogare la mappa con il comando d.what.vect. Il comando v.in.ogr, invece, resetta le categorie, la tabella fires originale (nello shape) è :

cat,N,11,0type,C,80label,C,80
1001WildfireNatural
1002WildfireHuman
1003WildfireNatural
1004Fire stationHeadQ
1005Fire stationNorth Brig
1006Fire stationEast Brig
1007Fire stationSouth Brig

mentre la tabella dbf fires importata (nella directory dbf del mapset in uso) diventa:

cat,N,11,0cat_,N,11,0type,C,80label,C,80
11001WildfireNatural
21002WildfireHuman
31003WildfireNatural
41004Fire stationHeadQ
51005Fire stationNorth Brig
61006Fire stationEast Brig
71007Fire stationSouth Brig

lo stesso succede con le categorie associate ai punti, nel file originale vanno da 1001 a 1007, in quello importato da 1 a 7.

La mappa vettoriale roads contiene 5 categorie ed è necessario distinguere le categorie delle linee da quelle dei punti. Si possono ripristinare le categorie originali in due passi: modificando le categorie dei punti nella mappa vettoriale fires e modificando la tabella fires. Si vogliono avere categorie da 1 a 5 per le strade (come è già per il file roads_fire) e categorie da 1001 a 1007 per gli incendi e le caserme. Si cambiano quindi le categorie della mappa fires in modo che unendola a roads_fires abbiano categoria univoca, cioè 1 ->1001, 2 ->1002 ecc. fino a 7 ->1007 creando il vettoriale fires_1:

> v.category input=fires output=fires_1 type=point,line,boundary,centroid,area option=sum cat=1000 layer=1 step=1 --overwrite

Si può controllare il risultato con:

> v.info map=fires_1

> v.out.ascii input=fires_1 format=standard

Si cambiano le categorie nella tabella fires_1 con

> echo "UPDATE fires_1 SET cat=1001 WHERE cat=1" | db.execute

> echo "UPDATE fires_1 SET cat=1002 WHERE cat=2" | db.execute

> echo "UPDATE fires_1 SET cat=1003 WHERE cat=3" | db.execute

> echo "UPDATE fires_1 SET cat=1004 WHERE cat=4" | db.execute

> echo "UPDATE fires_1 SET cat=1005 WHERE cat=5" | db.execute

> echo "UPDATE fires_1 SET cat=1006 WHERE cat=6" | db.execute

> echo "UPDATE fires_1 SET cat=1007 WHERE cat=7" | db.execute

Le linee nel file roads_fire sono sul layer 1, i punti si devono quindi mettere sul layer 2 con:

> v.category input=fires_1 output=fires type=point,line,boundary,centroid,area option=chlayer cat=1 layer=1,2 step=1 --overwrite

Si può controllare il risultato con:

> v.info map=fires

> v.out.ascii input=fires format=standard

Si deve scollegare la tabella fires sul layer 1 e ricollegarla sul layer 2. Per identificare GISDBASE, LOCATION_NAME e MAPSET si deve eseguire:

> eval `g.gisenv`

e quindi

> v.db.connect map=fires driver=dbf database=$GISDBASE/$LOCATION_NAME/$MAPSET/dbf/ table=fires key=cat layer=1 -d

> v.db.connect map=fires driver=dbf database=$GISDBASE/$LOCATION_NAME/$MAPSET/dbf/ table=fires key=cat layer=2

Si può visualizzare il risultato con:

> d.erase

> d.vect map=fires type=point,line,boundary,centroid,area,face display=shape,attr attrcol=type where="type='Wildfire'" icon=basic/x size=8 layer=2 color=red fcolor=gray llayer=2 lcolor=red bgcolor=none bcolor=none lsize=8 font=romans xref=left yref=center

> d.vect map=fires type=point,line,boundary,centroid,area,face display=shape,attr attrcol=type where="type='Fire station'" icon=basic/x size=8 layer=2 color=blue fcolor=gray llayer=2 lcolor=blue bgcolor=none bcolor=none lsize=8 font=romans xref=left yref=center

E interrogare con

> d.what.vect

Si devono collegare i punti alla rete delle strade: i collegamenti si possono generare automaticamente con il comandi v.distance, la flag -p indica di non aggiungere il valore della distanza alla tabella. I vettori che realizzano i collegamenti sono salvati nel vettoriale fires_connect.

> v.distance from=fires to=roads_fire from_type=point to_type=point,line,area from_layer=2 to_layer=1 output=fires_connect dmax=-1 upload=dist column=dist -p

v.distance non assegna alcuna categoria al vettoriale generato (fires_connect), la si deve aggiungere con v.category. Si assegna la categoria 5 sul layer 1 come per roads_fire (unimproved road) cioè quella più lenta

> v.category input=fires_connect output=fires_connect_cats type=point,line,boundary,centroid,area option=add cat=5 layer=1 step=0

Si possono visualizzare i collegamenti (in nero) con

> d.erase

incendi in rosso

> d.vect map=fires type=point,line,boundary,centroid,area,face display=shape,attr attrcol=type where="type='Wildfire'" icon=basic/x size=8 layer=2 color=red fcolor=gray llayer=2 lcolor=red bgcolor=none bcolor=none lsize=8 font=romans xref=left yref=center

caserme dei pompieri in blu

> d.vect map=fires type=point,line,boundary,centroid,area,face display=shape,attr attrcol=type where="type='Fire station'" icon=basic/x size=8 layer=2 color=blue fcolor=gray llayer=2 lcolor=blue bgcolor=none bcolor=none lsize=8 font=romans xref=left yref=center

collegamenti in nero

> d.vect map=fires_connect_cats type=point,line,boundary,centroid,area,face display=shape attrcol=label icon=basic/x size=8 layer=1 color=black fcolor=gray llayer=1 lcolor=red bgcolor=none bcolor=none lsize=8 font=romans xref=left yref=center


Visualizzazione delle caserme dei pompieri e degli punti d'incendio e dei collegamenti tra strade e punti di interesse

Si devono quindi unire le tre mappe di strade (roads_fire), collegamenti (fires_connect_cats)e incendi e caserme dei pompieri (fires) con v.patch. Questo modulo sovrascrive la mappa di output cancellandola prima di ricrearla, cancellando quindi eventuali tabelle collegate. Se la mappa fire_net esiste è prudente scollegare le tabelle con

> v.db.connect map=fire_net driver=dbf database=$GISDBASE/$LOCATION_NAME/$MAPSET/dbf/ table=roads_fire key=cat layer=1 -d

> v.db.connect map=fire_net driver=dbf database=$GISDBASE/$LOCATION_NAME/$MAPSET/dbf/ table=fires key=cat layer=2 -d

Le tre mappe si uniscono quindi con

> v.patch in=roads_fire,fires_connect_cats,fires out=fire_net --overwrite

E' necessario spezzare le strade alle intersezioni coi collegamenti creati con v.distance:

> v.clean in=fire_net out=fire_net_clean tool=snap,break thresh=1 --overwrite

La mappa fire_net_clean viene poi rinominata fire_net per semplicità (si cancella prima la mappa fire_net, dato che anche g.rename non sovrascrive mappe esistenti):

> g.remove vect=fire_net

> g.rename vect=fire_net_clean,fire_net

La mappa vettoriale fire_net non ha alcuna tabella associata, come si può verificare (Number of dblinks è 0) con

> v.info map=fire_net

La situazione dei layer è:

Layer

Contenuto

Categorie

1roads_fire + fires_connect_cats1-5
2fires1001-1007

Si collega la mappa fire_net alle due tabelle con

> v.db.connect map=fire_net driver=dbf database=$GISDBASE/$LOCATION_NAME/$MAPSET/dbf/ table=roads_fire key=cat layer=1

> v.db.connect map=fire_net driver=dbf database=$GISDBASE/$LOCATION_NAME/$MAPSET/dbf/ table=fires_1 key=cat layer=2