9 votos

Calcular el gráfico de visibilidad en la esfera

Tengo una tabla PostGIS con algunos polígonos (almacenados utilizando el tipo de datos geográficos). Representan regiones en una tierra esférica.

Para cada par de vértices elegidos entre todos los polígonos, quiero calcular si esos dos vértices son "visibles" entre sí. (Hay n* ( n -1)/2 tales pares, donde n es el número total de vértices únicos en todos los polígonos de la tabla). Por "visibles entre sí", quiero decir que la trayectoria del círculo máximo entre los dos vértices no se cruza con ninguno de los polígonos de la tabla.

¿Cuál es la forma más rápida de hacer ese cálculo, preferiblemente en PostgreSQL/PostGIS?

Tengo algo que funciona, pero es lento. Simplemente itero ingenuamente sobre todos los pares y veo si la LineString entre ellos interseca algún polígono. (El tipo de datos de geografía de PostGIS maneja toda la matemática difícil en la esfera para mí). Así que me pregunto si hay una estructura de datos inteligente o algoritmo que podría acelerar las cosas.

1voto

Clawish Puntos 118

Deduce lo que no es visible. Suponga que se encuentra en un vértice de la playa, mirando dos vértices remotos de un polígono vecino. Entonces puedes suponer que cualquier vértice en todo el sector detrás de estos vértices es invisible desde este vértice.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X