Voglio calcolare l'angolo tra due linee in cui si intersecano in PostGIS.
Il punto di partenza per i calcoli angolari in PostGIS sembra essere ST_Azimuth - ma questo prende punti come input. Il mio primo pensiero è stato quello di prendere gli estremi delle linee che si intersecano e di eseguire un calcolo Azimut su quelle. Questo non è abbastanza buono, perché la maggior parte delle caratteristiche della linea non sono dritte e sono interessato all'angolo all'intersezione. Quindi quello che mi è venuto in mente è un'operazione nidificata che passa attraverso i seguenti passaggi:
- Identificare tutte le intersezioni tra le tabelle delle caratteristiche di due linee.
- Crea un buffer molto piccolo attorno al punto di intersezione
- Identifica i punti in cui le caratteristiche della linea intersecano l'esterno del buffer (prendendo il primo punto se ce ne sono più di uno - Sono davvero interessato solo a sapere se l'angolo è vicino a 0, 90 o 180 gradi)
- Calcola ST_Azimuth per quei due punti.
L'intero SQL è un po 'lungo da pubblicare qui, ma l'ho indicato qui se sei interessato. (A proposito, c'è un modo migliore che riportare tutti i campi che scendono dalle istruzioni WITH?)
I risultati non sembrano giusti, quindi sto chiaramente facendo qualcosa di sbagliato:
MODIFICA Ho rifatto i calcoli in EPSG: 3785 e i risultati sono leggermente diversi ma ancora non corretti:
La mia domanda è dove sono i difetti in questo processo. Sto fraintendendo cosa fa ST_Azimuth? C'è un problema CRS? Qualcos'altro del tutto? O forse c'è un modo molto, molto più semplice per farlo?