ความแตกต่างระหว่าง ST_D ภายในและ ST_ ระยะทางสำหรับการค้นหาใกล้เคียงใน PostGIS คืออะไร


14

ฉันมีบันทึกที่เก็บไว้ในตารางที่มีพิกัดละติจูด / ลองจิจูดเก็บไว้ในเขตเรขาคณิต ฉันต้องการค้นหาระเบียนทั้งหมดที่อยู่ใกล้กับจุดอ้างอิงที่ผู้ใช้ระบุ หมายเหตุ "ใกล้เคียง" อาจหมายถึงน้อยกว่า 100km (อาจเล็กกว่า)

ST_DWithinตัวอย่างส่วนใหญ่ผมเห็นการใช้งาน มีเหตุผลที่คุณไม่สามารถใช้งานได้ST_Distanceหรือไม่? อะไรคือความแตกต่างระหว่างการใช้ST_DWithinและST_Distanceการทำสิ่งนี้?

ตัวอย่างเช่น:

SELECT name, ST_AsText(coords)
FROM places
WHERE ST_DWithin(coords, ST_GeomFromText('POINT(-12.5842 24.4944)',4326), 1)

VS

SELECT name, ST_AsText(coords)
FROM places
WHERE ST_Distance(coords, ST_GeomFromText('POINT(-12.5842 24.4944)',4326)) < 1

คำตอบ:


15

ST_Distance เป็นการคำนวณที่ต้องดำเนินการและประเมินผลทุกแถว ST_DWithin สามารถใช้ดัชนีดังนั้นจึงมีแนวโน้มที่จะมากได้เร็วขึ้น


4
นอกจากนี้ยังมีการจัดการเพื่อค้นหาสิ่งนี้ซึ่งกล่าวว่าสิ่งเดียวกันสวยมาก: postgis.net/2013/08/26/tip_ST_D ภายใน
ผู้ใช้
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.