こぼれネット

宇都宮ライトレールを単線にして分かりやすくしてみた件

宇都宮ライトレールに優先的に乗車させるような、ダイクストラをどうやって作ろうか?

をやっているのですが、宇都宮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)になり,対称性も担保できているようです。

モバイルバージョンを終了