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.
Nodi e archi possono essere chiusi assegnado un costo = -1.
I percorsi di minor costo vengono scritti nella mappa vettoriale di output con una tabella degli attributi assegnata.
I nodi possono essere rediretti nel programma da un file o dallo stdin con una pipe. La sintassi è la seguente:
id categoria_punto_iniziale categoria_punto_finale
id punto_iniziale_x punto_iniziale_y punto_finale_x punto_finale_y
I punti specificati con una categoria devono stare esattamente sui nodi della rete, e il vettoriale in ingresso dev'essere preparato con v.net operation=connect.
Quando vengono specificati con le coordinate, viene utilizzato il nodo più prossimo ad una data coppia di coordinate.
La tabella degli attributi contiene i seguenti attributi:
Se i costi nelle colonne 'afcol', 'abcol' e 'ncol' non sono definiti, viene misurata la lunghezza dei segmenti della rete e i costi per i nodi vengono considerati pari a zero.
Quando si usano gli attributi, la lunghezza dei segmenti non viene utilizzata. Per ottenere risultati più precisi, si dovrebbe tener conto della lunghezza quando si definiscono i costi come attributi. Per esempio, per ottenere il percorso più veloce sono richieste le colonne 'vel_max' e 'lunghezza'. Il percorso più veloce corretto si può quindi trovare definendo afcol=lunghezza/vel_max. Se necessario, la lunghezza della linea può essere calcolata e scritta sulla tabella degli attributi con v.to.db.
# Spearfish echo "1|601955.1|4916944.9|start 2|594385.6|4921565.2|end" | v.in.ascii in=- cat=1 x=2 y=3 out=startend col="cat integer, \ east double precision, north double precision, label varchar(6)" v.db.select startend g.copy vect=roads,myroads #creare una mappa di linee che connettono punti alla rete v.net myroads points=startend out=myroads_net op=connect thresh=500 alayer=1 nlayer=2 # definire i costi # 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,bcost 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: # definire i costi in avanti v.db.update myroads_net_time layer=3 col=cost val="length / speed * 60" # definire i costi all'indietro v.db.update myroads_net_time layer=3 col=bcost val="length / speed * 60" # ... il nodo 'partenza' e il nodo 'arrivo' hanno il numero di categoria 1 e 2 # Percorso più breve: ID come primo numero, quindi, cat1 e cat2 echo "1 1 2" | v.net.path myroads_net_time alayer=3 nlayer=2 out=mypath # Percorso più veloce: ID come primo numero, quindi cat1 e cat2 echo "1 1 2" | v.net.path myroads_net_time alayer=3 nlayer=2 afcol=cost abcol=bcost out=mypath_time
g.region vect=myroads_net d.mon x0 d.vect myroads_net # vedere il percorso più breve d.vect mypath col=red width=2 # ercorso più veloce d.vect mypath_time col=blue width=2 # punti di partenza e di arrivo d.vect myroads_net icon=basic/triangle fcol=green size=12 layer=2 d.font font=Vera d.vect startend disp=cat type=point lsize=14 layer=2
Last changed: $Date: 2011-11-08 12:29:50 +0100(mar, 08 nov 2011) $
Main index - vector index - Full index
© 2003-2011 GRASS Development Team