几天以来我一直在寻找解决方案,但找不到解决方法。
我的目标是根据巴士在它们之间的时间找到两个巴士站之间的最短路径。
所以我有公交线路,以及每条线路的时间表。成本由实际公交车站和下一个公交车站之间的时间差表示(以秒为单位)。源和目标是公交车站的ID
问题是:我有一些平行的链接,因为每辆公共汽车每天都有很多次线路,每次都以相同的方式运行。
我尝试过使用 pgrouting 的 shortest_path 函数,但由于并行链接,它多次返回错误的解决方案。
我已经看到了shooting_star,但我认为我不能在没有几何的情况下使用它。
我有 PostGreSQL 9.1.9 和 PostGIS 2.0.1。这是我的数据库提取的示例:
id | idcourse | source | target | cost |
1 | 1 | 62 | 34 | 60 |
2 | 1 | 34 | 16 | 360 |
3 | 1 | 16 | 61 | 60 |
4 | 1 | 61 | 60 | 120 |
5 | 2 | 62 | 34 | 60 |
这里的最后一排是与其他线路相同的公交线路(idcourse = 1)但一小时后
这是获取此信息的请求:
select hc.idhorairecourse as id, c.idcourse,
hc.idarret as source,
(select hc2.idarret from horairecourse hc2 where hc2.idcourse = c.idcourse and hc2.heure > hc.heure order by hc2.heure limit 1) as target,
(extract(epoch from ((select horairecourse.heure from horairecourse where horairecourse.idcourse = c.idcourse and horairecourse.heure > hc.heure order by horairecourse.heure limit 1) - hc.heure))) as cost
from course c
inner join horairecourse hc on c.idcourse = hc.idcourse
where (select horairecourse.idarret from horairecourse where horairecourse.idcourse = c.idcourse and horairecourse.heure > hc.heure order by horairecourse.heure limit 1) is not null
order by c.idcourse, hc.heure