Calcola il grafico di visibilità sulla sfera


9

Ho una tabella PostGIS con alcuni poligoni (memorizzati usando il tipo di dati geografici). Rappresentano regioni su una terra sferica.

Per ogni coppia di vertici scelti tra tutti i poligoni, voglio calcolare se quei due vertici sono "visibili" tra loro. (Esistono n * ( n -1) / 2 coppie di questo tipo, dove n è il numero totale di vertici univoci in tutti i poligoni nella tabella.) Per "visibile l'uno all'altro", intendo che il percorso del grande cerchio tra il due vertici non intersecano nessuno dei poligoni nella tabella.

Qual è il modo più veloce per fare quel calcolo, preferibilmente in PostgreSQL / PostGIS?

Ho qualcosa che funziona, ma è lento. Ho iterato ingenuamente su tutte le coppie e vedo se il LineString tra loro interseca eventuali poligoni. (Il tipo di dati geografici di PostGIS gestisce per me tutta la dura matematica sulla sfera.) Quindi mi chiedo se ci sia una struttura di dati intelligente o un algoritmo che potrebbe accelerare le cose.


6
Concetti rilevanti: grafici di visibilità e, se si desidera eseguire questo lavoro in 2D anziché in 3D, la proiezione Gnomonica .
whuber

"iterare su tutte le coppie" significa che hai un ciclo FOR nella procedura che verifica se una riga intercetta tutti i poligoni ?. In tal caso, è (probabilmente) più veloce, basta creare una tabella di stringa lineare con tutte le possibili combinazioni ed eseguire una query in cui si verifica se la linea interseca la tabella poligonale
simplexio

Potresti condividere un'illustrazione del problema.
addcolor

Puoi escludere tutto oltre l'orizzonte sferico (più bit per gli oggetti alti vicino al bordo) che viene rapidamente eseguito con un riquadro di delimitazione delle coordinate approssimativo. Altrimenti penso che fondamentalmente sia NP difficile.
AnserGIS,

Risposte:


1

Deduce ciò che non è visibile. Supponiamo che ti trovi su un vertice sulla spiaggia, guardando due vertici remoti di un poligono vicino. Quindi puoi presumere che qualsiasi vertice nell'intero settore dietro questi vertici sia invisibile da questo vertice.

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.