Tengo una tabla PostGIS con algunos polígonos (almacenados usando el tipo de datos de geografía). 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 de esos pares, donde n es el número total de vértices únicos en todos los polígonos de la tabla). Por "visible el uno al otro", me refiero a que la ruta del gran círculo entre dos vértices no se cruzan con ninguno de los polígonos en 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 ingenuamente itero sobre todos los pares y veo si LineString entre ellos se cruza con algún polígono. (El tipo de datos de geografía de PostGIS maneja todas las matemáticas difíciles en la esfera para mí). Entonces me pregunto si hay una estructura de datos inteligente o un algoritmo que pueda acelerar las cosas.
Respuestas:
Deduce lo que no es visible. Suponga que se para en un vértice en la playa, mirando dos vértices remotos de un polígono vecino. Entonces puede suponer que cualquier vértice en todo el sector detrás de estos vértices es invisible desde este vértice.
fuente