Come inserire i campi "from Node" e "To Node" in un grafo strade i 5 minuti
sabato, marzo 22, 2008
Necessario: Licenza ArcGIS 9.x
dll linkata a questo post
Livello di difficoltà: ESRI,ESRIdipendente,ArcGIS,webgis,blog,Autodesk,Tomtom,PDA

Ciao a tutti,
oggi vi voglio descrivere una dll molto utile per la realizzazione dei grafi, siano essi un grafo strade, piuttosto che un grafo di corsi d'acqua.
Come certo saprete questo genere di oggetti cartografici vengono descritti, in un GIS, attraverso la TOPOLOGIA ARCO-NODO.
La Topologia arco-nodo esprime la relazione che intercorre fra i 2 layer che compongono il grafo e definisce la lunghezza, la direzione e la connessione fra gli archi stessi.
In tutti i grafi ben congeniati, ogni arco avrà un proprio "ID_Arco", ovvero un codice univoco per ogni Arco e un "ID_Nodo", ovvero un codice univoco per ogni nodo.
Nella tabella di attributi dello shape o della feature class degli Archi ci saranno anche due campi denominati "from_node" e "to_node".
Ovvero il "from_node" è il punto iniziale dell'arco e il "to_node" è il punto finale dell'arco.
Di solito i valori di from_node e to_node coincidono con la direzione di digitalizzazione dell'arco stesso. Ci tengo a precisare che, anche qualora gli archi vengano digitalizzati in Autocad e successivamente importati in ArcGIS, vengono mantenute comunque tali direzioni.
La direzione di un arco ha una sua importanza solo nel caso in cui, sul grafo, vengano fatte analisi di traffico (nel caso di grafo strade), o analisi di flussi (nel caso di grafo fluviale).

Con la dll che vi vado a descrivere riusciremo/riuscirete a creare in un batter d'occhio il layer dei nodi e contemporaneamente andare a compilare i 2 campi from_node, to_node, che verranno aggiunti alla tabella degli archi.

Per partire dovrete disporre di uno shape/feature class di archi e di uno shape/feature class di punti. Quest'ultimo shape deve essere vuoto.
Quindi, create uno shape puntuale da ArcCatalog ed importatelo in ArcMap, senza fare alcuna editazione.

Aggiungete il pulsante caricando la dll.
ESRI,ESRIdipendente,ArcGIS,webgis,blog,Autodesk,Tomtom,PDA

Una volta cliccato sul pulsante, come vedete, vi viene chiesto qual'è il layer di polilinee e quello di punti.
Successivamente viene chiesto il valore del nodo iniziale.

ESRI,ESRIdipendente,ArcGIS,webgis,blog,Autodesk,Tomtom,PDA


ESRI,ESRIdipendente,ArcGIS,webgis,blog,Autodesk,Tomtom,PDA

Una volta fatta partire l'applicazione, in pochi secondi viene "riempito" lo shape puntuale inizialmente caricato vuoto. I punti vengono creati in corrispondenza dell'incrocio di due o più archi ed alla fine di ognuno di essi.
Ad ogni punto viene associato un codice numerico che va dal valore iniziale a "n".
In più, vengono creati i due campi "from node" e "to node" nella tabella di attributi degli archi.
Per completare il tutto, ad ogni nodo viene attribuita la "valence", ovvero viene indicato quanti archi concorrono in quel determinato nodo.

Ecco il risultato sia dal punto di vista grafico che alfanumerico.


ESRI,ESRIdipendente,ArcGIS,webgis,blog,Autodesk,Tomtom,PDA



Lascio una piccola postilla solo per gli amici dell'Emilia Romagna.
Le specifiche del grafo emiliano romagnolo prevedono un campo ID_Arco e ID_nodo, numerico di 11 cifre.
Questa estensione, molto utile, crea, in automatico dei campi ID, e di conseguenza, From_node, To_node, numerici da 9 cifre.
Nel caso emiliano romagnolo serve un campo double, mentre l'estensione crea campi long integer.

Se volete provare questa dll la trovate QUI

Buona Pasqua a tutti voi!
Ciao
Paolo

ESRI,ESRIdipendente,ArcGIS,webgis,blog,Autodesk,Tomtom,PDA



Etichette: ,

 
posted by Paolo at 6:06 PM | Permalink |


1 Commenti:


At 25/3/08 9:41 PM, Blogger Marica

Trovo questo post davvero utile e l'argomento grafo strade molto interessante, perciò vi pongo il seguente quesito: supponiamo avere una strada composta da più archi perchè attraversata da alcuni incroci, vorrei se fosse possibile orientare gli archi di quella via tutti nella stessa direzione.
Es: partendo da a -> b <- c
ottenere a -> b -> c
Qualche idea, una dll, codice vba?
Grazie in anticipo.

 


Torna all'inizio della pagina