Quiero calcular el ángulo entre dos líneas donde se cruzan en PostGIS.
El punto de partida para el cálculo de ángulos en PostGIS parece ser ST_Azimut - pero que toma puntos como entrada. Mi primera idea fue tomar los puntos finales de las líneas de intersección y realizar un cálculo de acimut en ellos. Eso no es suficiente, porque la mayoría de las características de la línea no son rectas, y estoy interesado en el ángulo en la intersección. Así que lo que se me ocurrió es una operación anidada que pasa por los siguientes pasos:
- Identifique todas las intersecciones entre las dos tablas de características lineales.
- Crear un pequeño búfer alrededor del punto de intersección
- Identificar los puntos en los que las características de la línea se cruzan con el exterior del búfer (tomando el primer punto si hay más de uno - en realidad sólo estoy interesado en si el ángulo es cercano a 0, 90 o 180 grados).
- Calcule ST_Azimuth para esos dos puntos.
El SQL completo es demasiado largo para publicarlo aquí, pero lo he reunido en un gist aquí si le interesa. (Por cierto, ¿hay alguna forma mejor que traspasar todos los campos bajando por las sentencias WITH)?
Los resultados no parecen correctos, así que está claro que estoy haciendo algo mal:
EDIT He rehecho los cálculos en EPSG:3785 y los resultados son un poco diferentes pero siguen sin ser correctos:
Mi pregunta es dónde están los fallos en este proceso. ¿Estoy entendiendo mal lo que hace ST_Azimuth? ¿Es un problema de CRS? ¿Algo más? ¿O tal vez hay una manera mucho, mucho más simple de hacer esto?