คำแถลงปัญหา: กำหนดเส้นทางรถบัส (กำหนดเป็น 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 แทน (ในทิศทางตรงกันข้าม) มีการแยกส่วนอย่างไม่ถูกต้องในกรณีนี้ (ซึ่งรวมส่วนเพิ่มเติมไว้ด้วย)
วิธีแก้ปัญหาเช่นนี้? เส้นทางรถเมล์ที่ทับซ้อนกันสามารถเกิดขึ้นได้ทุกส่วนของเส้นทาง ...