จะหาระยะทางและทิศทางระหว่างจุดหนึ่งและส่วนที่ใกล้ที่สุดของรูปหลายเหลี่ยมได้อย่างไร


9

ฉันค่อนข้างใหม่ในการเขียน SQL และใช้ PostGIS ดังนั้นต้องขออภัยถ้านี่ดูค่อนข้างง่ายหรือชัดเจน ฉันมีตารางของคุณสมบัติรูปหลายเหลี่ยมที่จัดขึ้นในฐานข้อมูล postGIS และฉันต้องเขียนแบบสอบถาม SQL เพื่อเลือกคุณลักษณะทั้งหมดระยะทางและทิศทางของคุณสมบัติรูปหลายเหลี่ยมในระยะทางที่กำหนดไว้ล่วงหน้า ฉันจัดการเพื่อเลือกคุณสมบัติและคำนวณระยะทาง (โดยใช้ ST_Distance) แต่ไม่สามารถหาวิธีการรับตลับลูกปืนได้

นี่คือสคริปต์ที่ฉันใช้อยู่:

SELECT *,
  ST_Distance (Geometry, ST_GeomFromText ('POINT(292596 90785)', 27700))
FROM mytable
WHERE
  ST_DWithin(
    Geometry,
    ST_GeomFromText('POINT(292596 90785)', 27700),
    250) 

ฉันจะหาทิศทางของคุณสมบัติและระยะทางได้อย่างไร

คำตอบ:


4

คุณสามารถใช้ ST_Azimuth ในการคำนวณการแบก แต่จะใช้รูปทรงเรขาคณิตเฉพาะจุดเป็นพารามิเตอร์ดังนั้นคุณต้องตัดสินใจว่าแบริ่งที่คุณต้องการจริงๆ

คุณสามารถเลือกบรรทัดที่สั้นที่สุดตามที่ @Nicklas ได้แนะนำ (ซึ่งเป็นระยะทางที่คุณคำนวณไปแล้ว) ซึ่งเหมาะสมถ้าคุณต้องการ "ทิศทาง" ที่เร็วที่สุดในการเข้าถึงรูปหลายเหลี่ยม สำหรับสิ่งอื่นฉันขอแนะนำให้คุณคำนวณเทียบกับรูปหลายเหลี่ยม centroid (ST_Centroid) ซึ่งควรให้ผลลัพธ์ที่ดีกว่าสำหรับรูปร่างตามอำเภอใจ


2

ใช้

ST_Azimuth (ST_Shortestline (geom1, geom2))

แก้ไข

ฉันเพิ่งรู้ว่า ST_Azimuth ไม่ได้ใช้ linestring เป็น argumetn ดังนั้นคุณจะต้องให้สองคะแนนแทน

หากหนึ่งในรูปทรงเรขาคณิตเป็นจุดหนึ่งคุณสามารถใช้สิ่งนั้นโดยตรงและใช้ ST_ClosestPoint เพื่อรับจุดบนรูปหลายเหลี่ยม


1

ST_Azimuthเป็นฟังก์ชันที่คุณต้องการ มันจะคืนค่ามุมเป็นเรเดียนตามเข็มนาฬิกาจากทิศเหนือ ตามที่ตัวอย่างในST_Azimuth()หน้าแสดงเพียงห่อในdegrees()ฟังก์ชันจะให้มุมเป็นองศาหากคุณต้องการ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.