ฉันจะค้นหาตำแหน่งระหว่างสองจุดใน PostGIS ได้อย่างไร
โปรดระบุในคำตอบของคุณไม่ว่าจะเป็นวิธีการผลิตตลับลูกปืนบนทรงกลมหรือตลับลูกปืนระนาบ
ฉันจะค้นหาตำแหน่งระหว่างสองจุดใน PostGIS ได้อย่างไร
โปรดระบุในคำตอบของคุณไม่ว่าจะเป็นวิธีการผลิตตลับลูกปืนบนทรงกลมหรือตลับลูกปืนระนาบ
คำตอบ:
แบริ่งระนาบสามารถคำนวณได้โดยใช้ST_Azimuth
:
SELECT ST_Azimuth(ST_MakePoint(1,2),
ST_MakePoint(3,4))/(2*pi())*360 as degAz,
ST_Azimuth(ST_MakePoint(3,4),
ST_MakePoint(1,2))/(2*pi())*360 As degAzrev
degaz degazrev
------ ---------
45 225
สำหรับราบราบ (การอ้างอิงกลุ่มผู้ใช้ potgis ):
ฟังก์ชัน azimuth ของ PostGIS ดูเหมือนว่าจะใช้ฟังก์ชัน arctan แบบง่าย ๆ เพื่อตรวจสอบ azimuth หากคุณแปลงพิกัดของคุณเป็นระบบพิกัดที่ฉายแล้วเรียกใช้แบบสอบถามผลลัพธ์ของคุณจะใกล้เคียงกับผลลัพธ์ของไซต์ FCC มากขึ้น
นี่คือการแปลงอย่างรวดเร็วเป็น UTM Zone 31:
select degrees(azimuth(
'POINT(634714.442133176 5802006.052402816)',
'POINT(634731.2410598891 5801981.648284801)'
));
ซึ่งให้ค่ามุมราบของ 145.457858825445 คะแนนที่อยู่ตรงกลางของโซน UTM หรือการฉายภาพที่เหมาะสมกว่าจะให้ผลลัพธ์ที่ดีกว่า
นี่เป็นวิธีแก้ปัญหาที่ฉันเลือกเมื่อฉันต้องจัดการกับปัญหานี้ส่วนใหญ่ด้วยเหตุผลดั้งเดิม (ฉันมีฟังก์ชั่น Python ซึ่งคำนวณค่าแอซิมัท) ก่อนอื่นเราต้องหาฟังก์ชั่นที่จะบอกระยะห่างที่แน่นอนระหว่างสองจุด การอ้างอิงคู่มือ postgis :
ST_distance_sphere (จุด, จุด) ส่งกลับระยะเชิงเส้นเป็นเมตรระหว่างจุดละติจูด / ลองจิจูดสองจุด ใช้โลกทรงกลมและรัศมี 6370986 เมตร เร็วกว่า distance_spheroid () แต่แม่นยำน้อยกว่า ดำเนินการเฉพาะสำหรับคะแนน
วัดระยะทางลองจิจูดและละติจูดระหว่างจุดต่าง ๆ และใช้arctan
ฟังก์ชั่นเพื่อดึงมุม
atan
อย่างไร? ตรีโกณมิติของฉันมันมืดครึ้มเล็กน้อย ...
สำหรับทุกคนที่เจอคำถามนี้ในขณะนี้ - PostGIS สนับสนุน ST_Azimuth ทางภูมิศาสตร์ (spheroid) ตั้งแต่ 2.0.0