Computar gráfico de visibilidade na esfera


9

Eu tenho uma tabela PostGIS com alguns polígonos (armazenados usando o tipo de dados geography). Eles representam regiões em uma terra esférica.

Para cada par de vértices escolhido entre todos os polígonos, quero calcular se esses dois vértices são "visíveis" um para o outro. (Existem n * ( n -1) / 2 desses pares, em que n é o número total de vértices únicos em todos os polígonos da tabela.) Por "visível um ao outro", quero dizer que o caminho do grande círculo entre o dois vértices não cruzam nenhum dos polígonos da tabela.

Qual é a maneira mais rápida de fazer esse cálculo, preferencialmente no PostgreSQL / PostGIS?

Eu tenho algo que funciona, mas é lento. Eu ingenuamente itero sobre todos os pares e vejo se o LineString entre eles cruza algum polígono. (O tipo de dados geográficos do PostGIS lida com toda a matemática difícil da esfera para mim.) Então, eu me pergunto se existe uma estrutura de dados ou algoritmo inteligente que possa acelerar as coisas.


6
Conceitos relevantes: gráficos de visibilidade e, se você quiser fazer esse trabalho em 2D, em vez de 3D, a projeção Gnomônica .
whuber

"iterar sobre todos os pares" significa que você possui um loop FOR no procedimento que testa se uma linha cruza todos os polígonos ?. Se assim é (provavelmente) mais rápido apenas criar linestring tabela com todas as combinações possíveis e fazer uma consulta onde você teste se a tabela cruza linha de polígono
simplexio

Você poderia compartilhar uma ilustração do problema.
Add-

Você pode excluir tudo além do horizonte esférico (além de bit para objetos altos próximos à borda), que é feito rapidamente com uma caixa delimitadora de coordenadas aproximada. Caso contrário, acho que é fundamentalmente difícil para o NP.
AnserGIS

Respostas:


1

Deduzir o que não é visível. Suponha que você esteja em um vértice na praia, olhando para dois vértices remotos de um polígono vizinho. Então você pode assumir que qualquer vértice em todo o setor por trás desses vértices é invisível a partir desse vértice.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.