何日も解決策を探していますが、解決する方法が見つかりません。
私の目標は、バスの所要時間に基づいて、2 つのバス停間の最短経路を見つけることです。
だから私はバス路線とそれぞれの時刻表を持っています。コストは、実際のバス停と次のバス停との時間差 (秒単位) で表されます。ソースとターゲットはバス停の ID です
問題は、各バスが 1 日に何度も同じ路線を走っており、毎回同じ方法で運行されているため、並列リンクがいくつかあることです。
pgrouting の shortest_path 関数を試してみましたが、並列リンクが原因で itt が何度も間違ったソリューションを返します。
私はshooting_starについて見てきましたが、私の場合、ジオメトリなしでは使用できないと思います。
私は PostGIS 2.0.1 で PostGreSQL 9.1.9 を持っています。私のデータベース抽出の例を次に示します。
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) ですが、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