I costi possono rappresentare la lunghezza delle linee oppure attributi salvati in una tabella di database. I valori di questi attributi sono considerati come costi dell'intero segmento, e non come costi per attraversare un'unità di lunghezza (p.es. metri) del segmento. Per esempio, se il limite di velocità è 100 Km/h, il costo per attraversare un segmento lungo 10 Km dev'essere calcolato come lungh/vel = 10 Km/(100 Km/h) = 0.1 h. Sono possibili assegnazioni di costo sia per gli archi che per i nodi, e anche costi diversi per le due direzioni di una linea vettoriale. Per le aree i costi vengono calcolati lungo i bordi.
Il vettoriale in ingresso dev'essere preparato con v.net operation=connect per collegare i punti che rappresentano i centri (nodi) alla rete.
I punti specificati come categorie devono stare esattamente sui nodi della rete,e il vettoriale in ingresso dev'essere preparato con v.net operation=connect.
Percorso più breve, su strade dissestate:
Percorso più veloce, su autostrade:
Ricescare il percorso più breve utilizzando la distanza, e il percorso più veloce utilizzando il tempo d percorrenza secondo i limiti di velocità dei diversi tipi di strada:
# Spearfish g.copy vect=roads,myroads # si devono visitare 6 luoghi echo "1|601653.5|4922869.2|a 2|608284|4923776.6|b 3|601845|4914981.9|c 4|596270|4917456.3|d 5|593330.8|4924096.6|e 6|598005.5|4921439.2|f" | v.in.ascii in=- cat=1 x=2 y=3 out=centers col="cat integer, \ east double precision, north double precision, label varchar(43)" # verificare la preparazione dei dati v.db.select centers v.category centers op=report # type count min max # point 6 1 6 # creare una mappa di linee che connettono i punti alla rete (sul layer 2) v.net myroads points=centers out=myroads_net op=connect thresh=500 v.category myroads_net op=report # Layer / table: 1 / myroads_net # type count min max # line 837 1 5 # # Layer: 2 # type count min max # point 6 1 5 # trovare il percorso più breve v.net.salesman myroads_net ccats=1-6 out=mysalesman_distance # definire i costi come tempo di percorrenza # creare una categoria diversa per ogni strada nel layer 3 v.category in=myroads_net out=myroads_net_time opt=add cat=1 layer=3 type=line # aggiungere una nuova tabella per il layer 3 v.db.addtable myroads_net_time layer=3 col="cat integer,label varchar(43),length double precision,speed double precision,cost double precision" # copiare il tipo di strada sul layer 3 v.to.db myroads_net_time layer=3 qlayer=1 opt=query qcolumn=label columns=label # inserire la lunghezza delle strade in miglia v.to.db myroads_net_time layer=3 type=line option=length col=length unit=miles # definire i limiti di velocità in miglia/ora v.db.update myroads_net_time layer=3 col=speed val="5.0" v.db.update myroads_net_time layer=3 col=speed val="75.0" where="label='interstate'" v.db.update myroads_net_time layer=3 col=speed val="75.0" where="label='primary highway, hard surface'" v.db.update myroads_net_time layer=3 col=speed val="50.0" where="label='secondary highway, hard surface'" v.db.update myroads_net_time layer=3 col=speed val="25.0" where="label='light-duty road, improved surface'" v.db.update myroads_net_time layer=3 col=speed val="5.0" where="label='unimproved road'" # definire i costi di viaggio come tempo di percorrenza in minuti: v.db.update myroads_net_time layer=3 col=cost val="length / speed * 60" # trovare il ercorso più veloce v.net.salesman myroads_net_time alayer=3 nlayer=2 acol=cost ccats=1-6 out=mysalesman_time
# Vedere i risultati g.region vect=myroads_net #pPercorso più breve d.mon x0 d.vect myroads_net d.vect centers -c icon=basic/triangle d.vect mysalesman_distance col=green width=2 d.font Vera d.vect centers col=red disp=attr attrcol=label lsize=12 # percorso più veloce d.mon x1 d.vect myroads_net d.vect centers -c icon=basic/triangle d.vect mysalesman_time col=green width=2 d.font Vera d.vect centers col=red disp=attr attrcol=label lsize=12
Last changed: $Date: 2011-11-08 10:42:51 +0100(mar, 08 nov 2011) $
Main index - vector index - Full index
© 2003-2011 GRASS Development Team