ฉันต้องการคำนวณมุมระหว่างสองบรรทัดที่พวกเขาตัดกันใน PostGIS
จุดเริ่มต้นสำหรับการคำนวณมุมใน PostGIS นั้นน่าจะเป็นST_Azimuth - แต่นั่นก็เป็นจุดที่ป้อนเข้า ความคิดแรกของฉันคือการหาจุดสิ้นสุดของเส้นตัดกันและทำการคำนวณแบบอะซิมุ ธ นั่นไม่ดีพอเพราะคุณสมบัติส่วนใหญ่ของเส้นไม่ตรงและฉันสนใจในมุมที่จุดตัด ดังนั้นสิ่งที่ฉันเกิดขึ้นคือการดำเนินการซ้อนกันที่ทำตามขั้นตอนต่อไปนี้:
- ระบุจุดแยกทั้งหมดระหว่างตารางคุณลักษณะสองบรรทัด
- สร้างบัฟเฟอร์ขนาดเล็กมากรอบ ๆ จุดตัด
- ระบุจุดที่คุณสมบัติของเส้นตัดกันด้านนอกของบัฟเฟอร์ (ใช้จุดแรกถ้ามีมากกว่าหนึ่ง - ฉันสนใจเฉพาะจริงๆว่ามุมนั้นใกล้กับ 0, 90 หรือ 180 องศา)
- คำนวณ ST_Azimuth สำหรับสองจุดนั้น
SQL แบบเต็มมีความยาวในการโพสต์ที่นี่ แต่ฉัน gisted ที่นี่ถ้าคุณสนใจ (โดยวิธีการมีวิธีที่ดีกว่าที่จะดำเนินการมากกว่าเขตข้อมูลทั้งหมดจะลงงบกับ?)
ผลลัพธ์ไม่ถูกต้องดังนั้นฉันจึงทำสิ่งที่ผิดอย่างชัดเจน:
แก้ไขฉันเพิ่มการคำนวณใน EPSG ใหม่: 3785 และผลลัพธ์จะแตกต่างกันเล็กน้อย แต่ก็ไม่ถูกต้อง:
คำถามของฉันอยู่ที่ข้อบกพร่องในกระบวนการนี้ ฉันเข้าใจผิดว่า ST_Azimuth ทำอะไรได้บ้าง มีปัญหา CRS หรือไม่ มีอะไรอีกบ้างไหม? หรืออาจจะมีวิธีที่ง่ายกว่านี้มากในการทำเช่นนี้?