Постановка проблеми: З огляду на маршрут автобуса (визначений як рядок ln.the_geom) та набір місць зупинки автобуса (pt1.the_geom, pt2.the_geom, ... ptn.the_geom), розділіть маршрут автобуса на сегменти між автобусними зупинками . Я використовую дві функції постгіс
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 прив’яже точку до іншого кінця рядкової лінії. Як приклад: Автобус їде від А до В, зробіть цикл, потім проїзд від В до А. "А до В" і "В до А" - паралельні маршрути з усіма перекритими точками. У випадку зупинок P1 та P2, P2 замість них заміняється у точку P2 '(у зворотному напрямку). У цьому випадку сегмент вилучається неправильно (куди входять додаткові сегменти).
Як вирішити подібні проблеми? Автобусні маршрути, що перекриваються, можуть статися на будь-якій ділянці маршруту ...