วิธีการแยก sublinestring จาก linestring ด้วยส่วนที่ทับซ้อนกัน


15

คำแถลงปัญหา: กำหนดเส้นทางรถบัส (กำหนดเป็น linestring ln.the_geom) และชุดของตำแหน่งป้ายรถเมล์ (pt1.the_geom, pt2.the_geom, ... ptn.the_geom) แบ่งเส้นทางรถประจำทางออกเป็นส่วน ๆ ระหว่างป้ายรถเมล์ . ฉันใช้สองฟังก์ชัน postgis

    ST_line_substring(ln.the_geom,ST_line_locate_point
    ln.the_geom,pt1.the_geom),ST_line_locate_point(ln.the_geom,pt2.the_geom))

ด้านบนใช้งานได้ดีหากเส้นทางรถเมล์ไม่มีส่วนที่ทับซ้อนกัน อย่างไรก็ตามหากมีส่วนที่ทับซ้อนกัน ST_line_locate_point จะถ่ายจุดหนึ่งไปยังอีกปลายหนึ่งของ linestring ตัวอย่างเช่น: รถบัสเดินทางจาก A ถึง B สร้าง loop จากนั้นเดินทางจาก B ถึง A "A ถึง B" และ "B to A" เป็นเส้นทางคู่ขนานที่มีจุดทั้งหมดซ้อนทับกัน ในกรณีที่ป้ายหยุดรถ P1 และ P2 P2 จะถูกจับคู่กับจุด P2 แทน (ในทิศทางตรงกันข้าม) มีการแยกส่วนอย่างไม่ถูกต้องในกรณีนี้ (ซึ่งรวมส่วนเพิ่มเติมไว้ด้วย)

วิธีแก้ปัญหาเช่นนี้? เส้นทางรถเมล์ที่ทับซ้อนกันสามารถเกิดขึ้นได้ทุกส่วนของเส้นทาง ... ตัวอย่าง


มีวิธีให้คุณระบุปลายทางของเส้นทางรถเมล์ของคุณและแยก linestring ที่ปิดเป็นเส้นในทิศทางใดทิศทางหนึ่งหรือไม่? จากนั้นคุณจะไม่มีส่วนที่ทับซ้อนกันอีกต่อไป ตัวอย่างเช่นคุณสามารถค้นหาจุดที่ไกลที่สุดในบรรทัดจากจุดเริ่มต้นและแยกบรรทัดของคุณออกเป็นสองทิศทางโดยใช้จุดนั้น
ฟาเอล

3
คำถามเก่า แต่ดูเหมือนว่าคุณต้องการเริ่มต้นและกำหนดส่วนต่างๆเข้าร่วมกับชุดข้อมูลคะแนนและลบส่วนใด ๆ ด้วยจุดเริ่มต้นที่สั่งซื้อใหญ่กว่าจุดสิ้นสุด มันสมเหตุสมผลหรือไม่?
Jorge Sanz

1
คุณช่วยระบุเรขาคณิต WKT สำหรับเส้นทางรถเมล์ที่กำหนดได้ไหม
kttii

คำตอบ:


1

สมมติว่าเส้นทางรถเมล์ซ้อนทับตัวเองไม่เกิน 2 เท่า ณ จุดใดก็ตามจากนั้นจะสามารถแก้ไขได้โดยการย้อนกลับบรรทัดสำหรับจุดค้นหาบรรทัดที่สองโดยระบุตำแหน่งที่ใกล้ที่สุดจนถึงจุดสิ้นสุดของบรรทัด คุณจะต้องลบสิ่งนี้ตั้งแต่ 1 เพื่อใช้ในแบบสอบถาม ST_LineSubstring เช่น

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