Come posso descrivere una relazione speciale tra i bordi connessi?


11

Considera questa semplice situazione in cui tre bordi si collegano a un nodo:

relazioni marginali

Vorrei scrivere una descrizione sintetica e chiara della relazione tra A e B in modo tale da differenziarla dalla relazione tra A e C. Qualcosa del tipo “quando si attraversa il nodo in senso orario, A è adiacente? a B, ma A non è adiacente? a C. " Ma non è proprio adiacenza.

Detto in un altro modo: immagina di essere in piedi sul nodo e di essere rivolto verso A. Inizi a girare in senso orario. Il bordo successivo in cui verrai è B, non C.

C'è un modo per descrivere questa relazione tra A e B in un modo più conciso, formale o corretto di quanto abbia scritto sopra?

Deve essere direzionale (esiste una relazione di questo tipo in senso orario da A, e un'altra esiste in senso antiorario). E deve scalare fino ai casi in cui più di tre spigoli sono collegati al nodo. Forse ha qualcosa a che fare con il routing? (Ci sto pensando nel contesto delle reti stradali.)

Due approcci che ho già provato ma con cui non sono andato lontano:

  1. Riferimenti alla topologia simili a 9IM : ho esaminato il DE-9IM e anche se non sono un matematico, penso di poter ancora dire dai diagrammi e dai termini che non copre questo tipo di relazione. Né lo trovo ancora nelle descrizioni della topologia nella guida ESRI o Oracle . (Forse c'è qualcosa lì, ma non lo trovo ancora!)

  2. Volti : ho giocato con il fatto che la faccia sul lato “nord” di A potrebbe anche essere delimitata da B, ma non da C. Tuttavia, come puoi vedere nel diagramma qui, non è sempre vero. Immagina che il mio diagramma sia un estratto di una rete stradale in cui A e C sono strade arteriose e B è una breve strada senza uscita.

Sospetto che potrebbe non esserci un solo termine per quello che sto cercando di dire; come minimo vorrei essere in grado di descrivere una relazione del genere in un modo più semplice di quello che ho fatto sopra. Questa è una domanda indipendente dalla piattaforma. In questo momento, sto solo cercando le parole giuste. In seguito cercherò di implementare il concetto in python (pyqgis o arcpy) su un file di forma, quindi qualsiasi risposta con quel punto finale in mente sarà particolarmente interessante, ma non necessaria.


Perché non si collega a ciascun nodo l'elenco dei bordi collegati ad esso ordinati per direzione?
luglio

1
Sembra che tu stia cercando un DCEL . Notare che quando si dualizza un grafico planare , le facce diventano nodi. Nell'illustrazione ci sono pezzi di tre facce alfa , beta e gamma , con bordo Una separazione beta da raggi gamma , bordo B separando gamma da alfa , e il bordo C separando alfa da beta . Ciò produce un grafico ciclico che contiene tutte le informazioni che stai cercando - e in effetti è davvero adiacenza nel doppio grafico.
whuber

@julien, grazie - è un'idea di implementazione decente; Lo proverò. Ma prima ... sto cercando una parola o una frase per descrivere questo tipo di relazione.
andytilia,

@whuber, grazie per il suggerimento. Non ho mai incontrato DCEL prima. Sembra che B sia il "prossimo" mezzo bordo del lato nord, il bordo medio ovest di A. Hm: allora se voglio andare in senso antiorario, allora considero il mezzo bordo rivolto a sud di A. E "ovest" è implicito dal nodo comune. Mi chiedo se funzionerà quando B non è un limite del volto (ad es. Strada senza uscita). Lo esaminerò ulteriormente.
andytilia,

@julien, sto leggendo di nuovo il tuo commento. Vedo ora che mi stai dando anche frasi suggerite. :-) Forse potrei usare "ordinato per direzione" per descrivere la relazione. Devo giocarci un po '.
andytilia,

Risposte:


1

So che sono un po 'in ritardo alla festa qui, ma questa è roba abbastanza interessante e spero che la mia risposta possa essere di qualche utilità.

Quello che stai chiedendo è una relazione qualitativa; il fratello spesso ignorato della relazione quantitativa. Il ragionamento qualitativo emerge abbastanza spesso nella scienza geospaziale. Le query di esempio includono: Quali pacchi sono adiacenti a questo? Quali sono le caratteristiche all'interno della sovrapposizione della regione A e della regione B? Quali regioni sono concave? Quale strada è sulla sinistra? Le relazioni sono: adiacente, all'interno di, concavo e a sinistra di. Le query qualitative spesso vengono trascurate o sottovalutate rispetto alle domande quantitative come quelle che sono più grandi, più brevi o più numerose.

Una relazione qualitativa che accetta due input è chiamata relazione binaria. Esistono due notazioni comuni per questo: - isLeftOf (A, B) Questa è la notazione del prefisso. - A isLeftOf B Questa è notazione infissa.

Negli esempi sopra c'era anche una relazione unaria: isConcave. Questa relazione mette in relazione una regione con se stessa e restituirebbe un valore booleano.

Tutti i predicati spaziali di Egenhofer nel modello a 9 intersezioni (referenziato in 9EIM) sono relazioni binarie tra due regioni. Potresti anche essere interessato a RCC di Randell, Cui e Cohn (http://en.wikipedia.org/wiki/Region_connection_calculus). Le relazioni qualitative (topologiche) fornite in quest'area di studio mettono in relazione le regioni con le regioni, e in seguito i lavori mettono in relazione le linee con le regioni e le linee con le linee. Tuttavia, questo non è proprio quello che stai cercando.

OK, scusa per la digressione, ma si spera che aiuti con l'aspetto terminologico della tua domanda.

@whuber era sulla buona strada con la proposta della edge list doppiamente connessa (DCEL). Questo è un parente stretto di mappe combinatorie, spesso utilizzate sotto le copertine nei sistemi CAD e bordi alati. Il concetto del bordo alato (http://en.wikipedia.org/wiki/Winged_edge) è il modo in cui lo standard ben noto del testo definisce un buco in un poligono (http://en.wikipedia.org/wiki/Well-nown_text #Geometric_objects). Nota sul poligono che l'ordine dei punti esterni è antiorario e orario per i punti interni. Una piccola fata che cammina lungo il confine in questo ordine vedrebbe sempre l'interno della regione alla sua sinistra.

Con le mappe combinatorie e DCEL il punto chiave è che questi oggetti sono definiti su una superficie che è orientabile. Non abbiamo bisogno di entrare nelle formalità matematiche - l'idea è piuttosto semplice: se puoi definire la direzione in superficie, come puoi fare con qualsiasi sistema di riferimento spaziale in un GIS, allora hai una superficie orientabile. Pertanto, se è possibile definire una direzione, è possibile definire un ordinamento direzionale attorno a qualsiasi punto della superficie. Con l'ordinamento direzionale è possibile definire isLeftOf (A, B), isRotationallyAdjacentTo (A, B) e così via.

La definizione di un ordine attorno a un vertice in un grafico incorporato in una superficie richiede due compiti: 1) assegnazione di etichette ai punti finali del bordo e 2) assegnazione di una convenzione per l'ordine attorno a un vertice. Se l'ordine degli elementi in un array (ad es. [A, B, C] nella tua immagine) è in senso orario, allora possiamo dire quale bordo è alla sinistra di B.

Nel tuo esempio, ogni elemento è adiacente agli altri. Questo fatto è visibile anche nell'array perché l'array in realtà rappresenta una permutazione, cioè l'ordine conta, ma quale elemento è il primo no. Quindi [A, B, C] è equivalente a [C, A, B]. In altre parole, l'array si avvolge rendendo l'ultimo elemento adiacente al primo.


Grazie! Mi piace il termine "Rotazionalmente adiacente". Deve solo essere esteso, come dici tu, con la convenzione per ordinare attorno a un vertice. Nel mio caso, devo definire quella convenzione caso per caso, quindi lavorerò sulla codifica di qualcosa come isRotationallyAdjacentTo (A, B, Direction) usando una permutazione come suggerisci tu. O in termini del caso sopra "A è adiacente in senso orario-rotazione a B, e A non è adiacente in senso orario-rotazione a C".
andytilia,

A proposito, non avevo ancora esaminato il calcolo delle connessioni regionali. Sebbene non sia proprio ciò che risolve questo problema (come dici tu), è comunque interessante. Puoi indicarmi le "opere successive" che hai in mente di Randell, Cui e Cohn? (hm: i personaggi di RC&C hanno creato un framework chiamato RCC)
andytilia il

4

Quando guardi i grafici di topologia e connettività che ottieni da fornitori come Teleatlas, Navteq, ESRI, ecc., Inizierai a vedere uno schema (ovviamente ognuno ha il suo modo "speciale" di fare le cose).

Personalmente , anche se 1) Topologia geospaziale e 2) I grafici di routing sono solo grafici e possono essere generalizzati per essere rappresentati nella stessa struttura di dati, cerco di evitarlo il più possibile.

Cerco di fare una distinzione nella mia testa.

  • Quando dico "Topologia geospaziale" (1) intendo una struttura grafica per rappresentare le relazioni geometriche delle caratteristiche (ad es. Ciò che resta del bordo A, quale faccia è formata dai bordi [A, B, C], ciò che è contenuto dalla faccia B, ecc.).
  • Quando dico "Grafico di instradamento" (2), intendo una struttura di grafico per risolvere i problemi di instradamento (ad es. Percorso più breve per ottenere da A-> B con restrizioni / condizioni [X])

Sono solo grafici e appartengono all'ampiezza della scienza , ma c'è un chiaro vantaggio di non generalizzare come la stessa cosa. Servono a scopi diversi ed è molto più facile ottimizzare e applicare operazioni quando sono specializzati a quel particolare scopo.

ESRI fa questo. Hanno una struttura grafica per topologia geospaziale (TopologyGraph) e una struttura grafica diversa per problemi di routing (set di dati di rete). Diamine, hanno anche una struttura grafica più vecchia - le reti geometriche - che serve bene per i problemi di flusso nelle reti di utilità.

Probabilmente, nel mondo PostgreSQL / PostGIS, incontriamo anche questo. Esiste una struttura di dati per il routing e un'altra per la topologia geospaziale .

Nella tua domanda, stai parlando di grafici e navigandoli in senso orario e antiorario, così come i volti, il che mi rende ciò per cui desideri una struttura specializzata (1).

Per "Topologia geospaziale", penso che un bel modo di rappresentare questo tipo di topologia sia il modo in cui l' Ufficio Idrografico del Regno Unito fa nella descrizione della topologia S57 della topologia completa .

Topologia completa UKHO

Molto simile a quello che fanno tutte le principali implementazioni.

Ora, se quello che stai cercando è il routing, allora il grafico diventa diverso in base alla necessità di connettività a una direzione o bidirezionale. Alla fine, si riduce a:

  • Avere nodi FROM collegati a nodi TO che creano bordi
  • I bordi hanno attributi per il lato sinistro e destro (ad es. Intervalli di indirizzi).
  • Le giunzioni (ovvero i nodi in cui si collegano i bordi) possono avere una serie di restrizioni. Quindi in pratica si avrebbe una voce di giunzione principale per rappresentare la giunzione stessa e voci singole con voci DA e TO per rappresentare le restrizioni di flusso.

Buona fortuna e facci sapere come viene realizzato il tuo progetto.


Mille grazie per aver fatto la chiara distinzione tra due tipi di grafici. Pensi che sia una discreta distinzione affermare che i grafici di routing generalmente contengono alcune informazioni sui bordi e / o sui nodi, mentre la topologia geospaziale non ha mai bisogno di attribuzione sui bordi e sui nodi (si basa solo sulle relazioni spaziali tra oggetti)? Immagino che il mio problema si adatti perfettamente al dominio della topologia geospaziale: la relazione tra i bordi A e B esiste indipendentemente da qualsiasi attribuzione ai bordi. Ma mi manca ancora un modo sintetico per nominare questa relazione ...
Andytilia,

Penso che sia troppo forte un'affermazione per dire che "la topologia geospaziale non ha mai bisogno di attribuzione sui bordi e sui nodi", è davvero caso per caso. Ho visto i grafici della topologia che contengono attribuzione condivisa tra le funzionalità che hanno quel nodo. Esempi sono i valori Z o Temperatura. Direi solo che basta chiamarlo nodo e distinguere il nodo collegato quando necessario, ma ovviamente non ho abbastanza contesto del problema generale che stai cercando di risolvere.
Ragi Yaser Burhum,

Ah, giusto, grazie: una rappresentazione in pianta planare di due strade che attraversano un ponte. Potrebbe esserci un nodo con quattro bordi, ma non tutti i bordi si collegano tra loro. Quindi il nodo deve contenere informazioni sui livelli di attraversamento, per differenziare quella situazione da un passaggio a livello.
andytilia,

1
Esattamente :). Ecco perché cito Junction. Stavo pensando a quel caso. Un modo per farlo è quello di rappresentare la giunzione come "nodo principale" con le voci FROM-TO. Le situazioni di sorpasso / sottopasso si verificano continuamente. Ancora peggio sono i casi come il Bay Bridge o a Chicago in cui ci sono bordi che corrispondono nello spazio 2D (sono effettivamente uno sopra l'altro) con una serie di bordi che scorre in una direzione, mentre l'altra serie scorre nell'altra.
Ragi Yaser Burhum,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.