GRASS logo

NOME

v.net.path - Trova il percorso più breve in una rete vettoriale.

PAROLE CHIAVE

vettore, rete, persorso minimo

SINOSSI

v.net.path
v.net.path help
v.net.path [-gs] input=nome output=nome [type=string[,string,...]] [alayer=integer] [nlayer=integer] [file=nome] [afcolumn=string] [abcolumn=string] [ncolumn=string] [dmax=float] [--overwrite] [--verbose] [--quiet]

Flag:

-g
Usa il calcolo geodetico per le location longitudine-latitudine
-s
Disegna sull'output i segmenti originali di input, anziché rappresentare ogni percorso con una linea.
--overwrite
Sovrascrive i file esistenti
--verbose
Output verboso del modulo
--quiet
Output quieto del modulo

Parametri:

input=nome
Nome della mappa vettoriale di input
output=nome
Nome della mappa vettoriale di output
type=string[,string,...]
Tipo di arco
Opzioni: line,boundary
Predefinito: line,boundary
alayer=integer
Numero del layer
Layer degli archi
Predefinito: 1
nlayer=integer
Numero del layer
Layer dei nodi
Predefinito: 2
file=nome
Nome del file contenente i punti d'inizio e di fine. Se non sono definiti legge dallo stdin
afcolumn=string
Colonna costo direzione avanti/entrambe per gli archi
abcolumn=string
Colonna costo direzione indietro per gli archi
ncolumn=string
Colonna costo per i nodi
dmax=float
Distanza massima dalla rete
Se inizio/fine sono dati come coordinate. Se il punto inizio/fine è al di fuori di questa soglia, il percorso non viene trovato e viene stampato un messaggio d'errore. Per velocizzare il processo è meglio tenere questo valore più basso possibile.
Predefinito: 1000

DESCRIZIONE

v.net.path determina il percorso meno costoso, p.es. più breve o più veloce, in una rete in formato vettoriale.

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
o
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:

  • cat - categoria unica del percorso assegnata dal modulo
  • id - identificativo del percorso (letto dall'input)
  • fcat - categoria del punto di partenza (from point)
  • tcat - categoria del punto di arrivo (to point)
  • sp - [codici di] stato del risultato:
  • 0 - percorso trovato
  • 1 - nodo non raggiungibile
  • 2 - non esiste il punto associato alla categoria
  • cost - costi di attraversamento (sulla rete, non verso o dalla rete)
  • fdist - la distanza della rete dal primo punto
  • tdist - la distanza del secondo punto dalla rete
  • NOTE

    Nodi e archi possono essere chiusi assegnado un costo = -1.

    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.

    ESEMPIO

    Percorso più breve (rosso) e più veloce (blu) tra due nodi digitalizzati (Spearfish):

    v.net.path example

    # 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
    
    Per vedere il risultato eseguire, per esempio:
    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
    
    v.net.path example

    VEDI ANCHE

    d.path, v.net, v.net.alloc, v.net.iso, v.net.salesman, v.net.steiner, v.to.db

    AUTORE

    Radim Blazek, ITC-Irst, Trento, Italy
    Documentation: Markus Neteler, Markus Metz

    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