ฉันใช้ PostGIS เพื่อคำนวณเพื่อนบ้านที่ใกล้เคียงที่สุดของรูปหลายเหลี่ยม สิ่งที่ฉันต้องการคำนวณคือระยะทางขั้นต่ำจากรูปหลายเหลี่ยมแต่ละรูปไปยังรูปหลายเหลี่ยมที่ใกล้ที่สุด
จนถึงตอนนี้ฉันได้รับความช่วยเหลืออย่างมากจากคำตอบของ Mike Toews (ซึ่งฉันพูดด้วยการเปลี่ยนแปลงเล็กน้อย) ที่นี่:
SELECT
a.hgt AS a_hgt,
b.hgt AS b_hgt,
ST_Distance(a.the_geom, b.the_geom) AS distance_between_a_and_b
FROM
public."TestArea" AS a, public."TestArea" AS b
WHERE
a.hgt != b.hgt AND ST_Distance(a.the_geom, b.the_geom) < 400
จากนั้นฉันคำนวณขั้นต่ำ:
SELECT a_hgt, MIN(distance_between_a_and_b)
FROM public."lon_TestArea"
GROUP BY a_hgt
อย่างไรก็ตามความท้าทายของฉันคือการคำนวณสิ่งนี้สำหรับรูปหลายเหลี่ยมจำนวนมาก (1,000,000) เนื่องจากการคำนวณข้างต้นเปรียบเทียบแต่ละรูปหลายเหลี่ยมกับรูปหลายเหลี่ยมอื่น ๆ ฉันสงสัยว่าฉันจะปรับปรุงการคำนวณได้อย่างไรเพื่อที่ฉันจะได้ไม่ต้องทำการคำนวณ 10 ^ 12
หนึ่งคิดว่าฉันต้องบัฟเฟอร์แต่ละรูปหลายเหลี่ยมแล้วคำนวณเพื่อนบ้านที่ใกล้ที่สุดของค่าทั้งหมดภายในบัฟเฟอร์สำหรับรูปหลายเหลี่ยมนั้นและบันทึกขั้นต่ำ ฉันไม่แน่ใจว่าเป็นวิธีที่ดีที่สุดหรือมีฟังก์ชั่นใน PostGIS ที่ฉันควรใช้หรือไม่
แก้ไข: ใช้หนึ่งในคำแนะนำของ Nicklas ฉันกำลังทดลองกับST_Dwithin()
:
CREATE TABLE mytable_withinRange AS SELECT
a.hgt AS a_hgt,
b.hgt AS b_hgt,
ST_DWithin(a.the_geom, b.the_geom, 400)
FROM
public."lon_TestArea" AS a, public."lon_TestArea" AS b
ส่งคืนตาราง ID ของแต่ละรูปหลายเหลี่ยมและไม่ว่าจะอยู่ในระยะที่กำหนดหรือไม่ เป็นไปได้หรือไม่ที่จะสร้างIF/ELSE
คำสั่ง type โดยใช้ SQL? (ฉันอ่านเกี่ยวกับการใช้CASE
เงื่อนไข) หรือฉันควรลองเข้าร่วมตารางที่ฉันผลิตไปยังตารางเดิมแล้วเรียกใช้แบบสอบถามอีกครั้งโดยใช้ ST_Distance?