Je veux calculer l'angle entre deux lignes où elles se croisent dans PostGIS.
Le point de départ des calculs d'angle dans PostGIS semble être ST_Azimuth - mais cela prend des points en entrée. Ma première pensée a été de prendre les extrémités des lignes qui se croisent et d'effectuer un calcul d'azimut sur celles-ci. Ce n'est pas suffisant, car la plupart des entités linéaires ne sont pas droites et je m'intéresse à l'angle à l'intersection. Donc, ce que j'ai trouvé est une opération imbriquée qui passe par les étapes suivantes:
- Identifiez toutes les intersections entre les deux tables d'entités linéaires.
- Créer un très petit tampon autour du point d'intersection
- Identifiez les points où les entités linéaires coupent l'extérieur du tampon (en prenant le premier point s'il y en a plusieurs - je ne suis vraiment intéressé que si l'angle est proche de 0, 90 ou 180 degrés)
- Calculez ST_Azimuth pour ces deux points.
Le SQL complet est un peu long à publier ici, mais je l'ai ici si vous êtes intéressé. (Soit dit en passant, y a-t-il une meilleure façon que de reporter tous les champs en descendant les instructions WITH?)
Les résultats ne semblent pas corrects, donc je fais clairement quelque chose de mal:
EDIT J'ai refait les calculs en EPSG: 3785 et les résultats sont un peu différents mais toujours pas corrects:
Ma question est de savoir où sont les défauts dans ce processus. Suis-je en train de mal comprendre ce que fait ST_Azimuth? Y a-t-il un problème CRS? Quelque chose d'autre? Ou peut-être existe-t-il une manière beaucoup, beaucoup plus simple de le faire?