宇都宮ライトレールを単線にして分かりやすくしてみた件
をやっているのですが、宇都宮LRTは複線(つまり2本ある)、ダイクストラ計算する時に面倒くさいので、JOSM上で強制的に単線にしてしまいました。
で、まあ、結局、データベースを最初から作り直しとなり、週末が全部ふっとびました。
改ざんしたOSMファイルはこちらです → utsunomiya-lrt-latest-3-no_modify.osm
(改ざん前)
(改ざん後)
加えて、LRTの登りと下りが同じ経路を通っていないみたいで、頭をかかえていました。
59、2は、LRTの端点のsourceです。
utsu_tram_db3=# SELECT node, edge, cost FROM pgr_dijkstra('SELECT gid as id,source, target,length as cost, reverse_cost FROM ways',59, 2);
node | edge | cost
-------+-------+------------------------
59 | 39645 | 0.000838932462205439
57 | 42199 | 0.00017001043575301866
56 | 39644 | 0.0006648489696234544
54 | 39643 | 0.0001856669446528486
52 | 48847 | 0.00023156077313171402
43717 | 60590 | 0.0008988270825760914
43716 | 60589 | 0.00024913429002363974
(中略)
6 | 39627 | 0.0013247287163596904
3 | 39626 | 4.3848865768758054e-05
2 | -1 | 0
(67 rows)
で、この、59, 2をひっくり返すと
utsu_tram_db3=# SELECT node, edge, cost FROM pgr_dijkstra('SELECT gid as id,source, target,length as cost, reverse_cost FROM ways',2, 59);
node | edge | cost
-------+-------+------------------------
2 | 6 | 0.00011771065375457692
1 | 41208 | 0.0006123344685235885
20511 | 26189 | 0.0023489322317445127
13446 | 33830 | 0.0006745722936052778
26440 | 8017 | 0.0017400311472012054
(中略)
54 | 39644 | 0.0033242448481172722
56 | 42199 | 0.0008500521787650932
57 | 39645 | 0.0041946623110271945
59 | -1 | 0(117 rows)
数が合わない。 あれー、 reverser_costを入れれば、いいんじゃないの? と悩んでいました。
QGISで見ている限り、問題ないように見えます。
ちょっと調べてみたら、パスの方向を見られている可能性に気がついて、(1)reverse_costを抜いて、(2)length as cost を cost にして、(3)directed:=false を付けてみました。
utsu_tram_db3=# SELECT seq, node, edge FROM pgr_dijkstra('SELECT gid as id, source, target, cost FROM ways', 2, 59, directed:=false);
seq | node | edge
-----+-------+-------
1 | 2 | 39626
2 | 3 | 39627
3 | 6 | 42190
4 | 7 | 58678
5 | 41995 | 48370
6 | 10 | 42191
(中略)
62 | 43717 | 48847
63 | 52 | 39643
64 | 54 | 39644
65 | 56 | 42199
66 | 57 | 39645
67 | 59 | -1
(67 rows)utsu_tram_db3=# SELECT seq, node, edge FROM pgr_dijkstra('SELECT gid as id, source, target, cost FROM ways', 59, 2, directed:=false);
seq | node | edge
-----+-------+-------
1 | 59 | 39645
2 | 57 | 42199
3 | 56 | 39644
4 | 54 | 39643
5 | 52 | 48847
6 | 43717 | 60590
(中略)
62 | 10 | 48370
63 | 41995 | 58678
64 | 7 | 42190
65 | 6 | 39627
66 | 3 | 39626
67 | 2 | -1
(67 rows)
同じ数(67 rows)になり,対称性も担保できているようです。