มีฟังก์ชั่น PostGIS ในการพิจารณาว่า linestring ตัดกันหรือไม่?


16

ฉันกำลังมองหาฟังก์ชั่นที่สามารถบอกฉันได้ว่า LineString ตัดกันหรือไม่ ฉันได้ลองโทรst_intersectsด้วย LineString เดียวกันสองครั้ง แต่ linestrings ที่เหมือนกันชัดเจนจะตัดกัน แผนของฉันถ้าไม่มีฟังก์ชั่นจะได้รับคะแนนทั้งหมดในสตริงบรรทัดและสร้างการคืนค่าแต่ละรายการจากนั้นตรวจสอบการเชื่อมต่อใหม่แต่ละรายการต่อกันด้วย st_intersects ฉันไม่ต้องการให้มันมาถึงที่นี่ แต่ฉันกลัวว่ามันจะ

ดังนั้นจะมีฟังก์ชั่น PostGIS สำหรับตรวจสอบว่า linestring ตัดกันตัวเองหรือไม่? มันควรจะคล้ายกับการค้นหาว่ารูปหลายเหลี่ยมนั้นซับซ้อนหรือไม่


มีคำตอบที่สองที่นี่ซึ่งไม่ได้ช่วย PostGIS ฉันอย่างชาญฉลาด แต่มันมีลิงก์ไปยังข้อมูลที่เป็นประโยชน์เกี่ยวกับปัญหาโดยรวม ดูเหมือนว่ามันจะถูกลบ ไม่มีใครมีลิงค์นั้นบ้าง?
Jeff

คำตอบ:


14

คุณสามารถทดสอบการตัดกับตัวเองด้วยST_IsSimple(geom):

SELECT ST_IsSimple('LINESTRING (50 50, 150 150, 50 150, 150 50)');
 st_issimple
-------------
 f
(1 row)

จุดตัดเองที่จุด (100.0 100.0)

ภาพด้านบนและคำอธิบายใต้ภาพมาจาก JTS TestBuilder (คลิก "ง่าย ๆ ")

แยกเองที่ POINT ( 100.0 100.0 )

สิ่งนี้สามารถแก้ไขได้ด้วยST_UnaryUnion(geom)(ตั้งแต่ PostGIS 2.0) ซึ่งส่งกลับมัลติซิงก์สามชิ้นที่ถูกต้อง / ใช้งานง่าย:

MULTILINESTRING((50 50, 100 100), 
  (100 100, 150 150, 50 150, 100 100), 
  (100 100, 150 50))

มันสมบูรณ์แบบ! ฉันรู้ว่าคำตอบนั้นง่ายมาก คุณบอกว่าคุณใช้ JTS Testbuilder เพื่อสร้างภาพ มีวิธีใดที่คุณรู้จักใน Postgis เพื่อให้ได้จุด / จุดตัด?
Jeff

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