Chcę obliczyć kąt między dwiema liniami, w których przecinają się one w PostGIS.
Punktem wyjścia dla obliczeń kąta w PostGIS wydaje się być ST_Azimuth - ale to bierze punkty jako dane wejściowe. Moją pierwszą myślą było wybranie punktów końcowych przecinających się linii i wykonanie na nich obliczeń azymutu. To nie wystarcza, ponieważ większość cech linii nie jest prosta, a mnie interesuje kąt na przecięciu. Tak więc wymyśliłem zagnieżdżoną operację, która przechodzi przez następujące kroki:
- Zidentyfikuj wszystkie przecięcia między dwiema tabelami cech linii.
- Utwórz bardzo mały bufor wokół punktu przecięcia
- Zidentyfikuj punkty, w których cechy linii przecinają zewnętrzną część bufora (biorąc pierwszy punkt, jeśli jest więcej niż jeden - naprawdę interesuje mnie tylko, czy kąt jest bliski 0, 90 lub 180 stopni)
- Oblicz ST_Azimuth dla tych dwóch punktów.
Pełny SQL jest dość długi, aby opublikować tutaj, ale przedstawiłem go tutaj, jeśli jesteś zainteresowany. (Nawiasem mówiąc, czy istnieje lepszy sposób niż przeniesienie wszystkich pól w dół instrukcji WITH?)
Wyniki nie wyglądają dobrze, więc najwyraźniej robię coś złego:
EDYCJA Zmieniłem obliczenia w EPSG: 3785, a wyniki są trochę inne, ale nadal nie tak:
Moje pytanie brzmi, gdzie są wady tego procesu. Czy nie rozumiem, co robi ST_Azimuth? Czy występuje problem z CRS? Coś jeszcze w ogóle? A może jest na to znacznie prostszy sposób?