มากกว่า

ST_ClosestPoint(เส้น, จุด) ไม่ตัดกับเส้น

ST_ClosestPoint(เส้น, จุด) ไม่ตัดกับเส้น


ในฐานข้อมูล PostGIS ของฉัน (PostGIS 1.5 บน Postgres 8.4.1) ฉันมีสองตาราง: ถนน (ประกอบด้วยเส้นสาย) และจุดชนวน (ประกอบด้วยจุด) ฉันพยายามเชื่อมโยงการชนแต่ละครั้งกับถนน แต่ฉันมีปัญหาในการทำงานต่อไปนี้:

เลือก ST_ClosestPoint(road.the_geom, crash.the_geom), ST_Intersects(ST_ClosestPoint(road.the_geom, crash.the_geom), road.the_geom) ST_Distance(ST_ClosestPoint(road.the_geom, crash.the_geom), crash.the_geom) AS ระยะทางจาก - - ตารางขัดข้องอยู่ใน SRID 4326 (เลือก the_geom FROM ขัดข้อง WHERE gid = 360) เป็นความผิดพลาด (SELECT ST_SetSrid(the_geom, 4326) เป็น the_geom จากถนน) เป็นถนน ORDER BY ระยะทาง

คิวรีนี้ควรส่งคืนจุดที่ใกล้เคียงที่สุดกับจุดชนที่มี gid 360 ในแต่ละถนน แต่ฟังก์ชัน ST_Intersects จะส่งกลับค่าเท็จสำหรับผลลัพธ์แรก (จุดที่ใกล้ที่สุดที่แท้จริงเหนือถนนทุกสาย) ฉันทำอะไรผิดหรือเปล่า? มีวิธีอื่นในการเชื่อมโยงการชนกับถนนที่ใกล้ที่สุดหรือไม่?


นี่เป็นปัญหาที่มาจาก ST_Intersects ที่ไม่มีความอดทน แม้ว่าพิกัดความแม่นยำสองเท่าจะมีทศนิยมจำนวนมาก แต่ก็สร้างตารางที่มีจุดจุดเดียวอยู่ในทางแยก บ่อยครั้งที่เส้นไม่ตัดกับทางแยกเหล่านั้น และไม่มีทางใดที่จะตัดกับเส้นตรงอย่างแน่นอน วิธีแก้ปัญหาคือใช้ st_dwithin แทนด้วยค่าเผื่อเล็กน้อย

/นิกลาส