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


11

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

SELECT 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 distance
    FROM
        --Table crashes is already in SRID 4326
        (SELECT the_geom FROM crashes WHERE gid = 360) as crash,
        (SELECT ST_SetSrid(the_geom, 4326) as the_geom from roads) as road
    ORDER BY distance;

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

คำตอบ:


9

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

/ Nicklas

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