Saya ingin menghitung sudut antara dua garis di mana mereka berpotongan di PostGIS.
Titik awal untuk perhitungan sudut dalam PostGIS tampaknya ST_Azimuth - tetapi itu mengambil poin sebagai input. Pikiran pertama saya adalah mengambil titik akhir dari garis yang berpotongan dan melakukan perhitungan Azimuth pada mereka. Itu tidak cukup baik, karena sebagian besar fitur garis tidak lurus, dan saya tertarik pada sudut di persimpangan. Jadi yang saya hasilkan adalah operasi bersarang yang melewati langkah-langkah berikut:
- Identifikasi semua persimpangan antara dua tabel fitur garis.
- Buat penyangga yang sangat kecil di sekitar titik persimpangan
- Identifikasi titik-titik di mana fitur garis memotong eksterior penyangga (mengambil titik pertama jika ada lebih dari satu - Saya benar-benar hanya tertarik pada apakah sudutnya mendekati 0, 90 atau 180 derajat)
- Hitung ST_Azimuth untuk dua poin itu.
SQL lengkapnya agak panjang untuk dikirim di sini, tapi saya sudah mengatasinya di sini jika Anda tertarik. (Ngomong-ngomong, apakah ada cara yang lebih baik daripada membawa semua ladang ke bawah pernyataan WITH?)
Hasilnya tidak terlihat benar, jadi saya jelas melakukan sesuatu yang salah:
EDIT Saya redid perhitungan dalam EPSG: 3785 dan hasilnya sedikit berbeda tetapi masih tidak benar:
Pertanyaan saya adalah di mana kelemahan dalam proses ini. Apakah saya salah memahami apa yang dilakukan oleh ST_Azimuth? Apakah ada masalah CRS? Sesuatu yang lain sama sekali? Atau mungkin ada cara yang jauh lebih sederhana untuk melakukan ini?