sharpファイルで得られたバスルートのデータを力づくでosmファイルににした後、ダイクストラ計算ができるようにする為には

sharpファイルで得られたバスルートのデータを力づくでosmファイルにする

上記の方法で作成したOSMファイルでは、OSMにした時に、Nodeがバスルートの終端ににしかできないことが分かり、正直愕然としていました。これでは、バスの乗客は、バスの出発と到着地点でしか乗降できないことになるからです。

なんとかNodeを作り出せないか、色々試していたまま、いたずらに時間が過ぎていったのですが、ようやく、分かりました。

答えは、Tag情報を付与すること、でした。

作成したOMSファイルはこんな感じ

<?xml version='1.0' encoding='UTF-8'?>
<osm version='0.6' generator='JOSM'>
<node id='200000' visible='true' version='1' lat='35.568239' lon='139.552822' />
<node id='200001' visible='true' version='1' lat='35.568164' lon='139.5528' />
<node id='200002' visible='true' version='1' lat='35.568321' lon='139.551491' />
<node id='200003' visible='true' version='1' lat='35.568338' lon='139.55136' />
<node id='200004' visible='true' version='1' lat='35.568355' lon='139.551264' />
<node id='200005' visible='true' version='1' lat='35.568406' lon='139.550885' />
<node id='200006' visible='true' version='1' lat='35.568423' lon='139.550768' />
<node id='200007' visible='true' version='1' lat='35.568445' lon='139.550568' />
<node id='200008' visible='true' version='1' lat='35.568462' lon='139.550513' />
<node id='200009' visible='true' version='1' lat='35.568507' lon='139.550154' />
<node id='200010' visible='true' version='1' lat='35.568564' lon='139.549755' />
<node id='200011' visible='true' version='1' lat='35.568603' lon='139.549438' />
<node id='200012' visible='true' version='1' lat='35.568665' lon='139.548962' />
<node id='200013' visible='true' version='1' lat='35.568671' lon='139.54888' />
<node id='200014' visible='true' version='1' lat='35.56871' lon='139.548563' />
<node id='200015' visible='true' version='1' lat='35.568817' lon='139.54744' />
<node id='200016' visible='true' version='1' lat='35.568851' lon='139.547054' />
<node id='200017' visible='true' version='1' lat='35.568879' lon='139.546737' />
<node id='200018' visible='true' version='1' lat='35.568924' lon='139.546475' />
<node id='200019' visible='true' version='1' lat='35.568986' lon='139.546241' />
<node id='200020' visible='true' version='1' lat='35.569071' lon='139.545979' />
<node id='200021' visible='true' version='1' lat='35.569094' lon='139.545918' />
<node id='200022' visible='true' version='1' lat='35.569057' lon='139.54587' />
<node id='200023' visible='true' version='1' lat='35.568969' lon='139.54582' />
<node id='200024' visible='true' version='1' lat='35.568586' lon='139.545565' />
<node id='200025' visible='true' version='1' lat='35.568372' lon='139.545373' />
<node id='200026' visible='true' version='1' lat='35.567171' lon='139.543939' />
<node id='200027' visible='true' version='1' lat='35.566558' lon='139.543161' />
<node id='200028' visible='true' version='1' lat='35.566434' lon='139.543016' />
<node id='200029' visible='true' version='1' lat='35.56622' lon='139.542644' />
<node id='200030' visible='true' version='1' lat='35.565938' lon='139.542162' />
<node id='200031' visible='true' version='1' lat='35.565519' lon='139.541454' />
<node id='200032' visible='true' version='1' lat='35.565482' lon='139.541383' />

QGISの表示はこんな感じ

Nodeが全然表われません。

今度は、これに、適当に

'/>  → '> <tag k='highway' v='bus_stop'/> 

と、適当に変換・追加してしてみました。

<?xml version='1.0' encoding='UTF-8'?>
<osm version='0.6' generator='JOSM'>
<node id='200000' visible='true' version='1' lat='35.568239' lon='139.552822'/>
<node id='200001' visible='true' version='1' lat='35.568164' lon='139.5528'/>
<node id='200002' visible='true' version='1' lat='35.568321' lon='139.551491'/>
<node id='200003' visible='true' version='1' lat='35.568338' lon='139.55136'>
<tag k='highway' v='bus_stop'/>
</node>
<node id='200004' visible='true' version='1' lat='35.568355' lon='139.551264'/>
<node id='200005' visible='true' version='1' lat='35.568406' lon='139.550885'/>
<node id='200006' visible='true' version='1' lat='35.568423' lon='139.550768'/>
<node id='200007' visible='true' version='1' lat='35.568445' lon='139.550568'/>
<node id='200008' visible='true' version='1' lat='35.568462' lon='139.550513'/>
<node id='200009' visible='true' version='1' lat='35.568507' lon='139.550154'/>
<node id='200010' visible='true' version='1' lat='35.568564' lon='139.549755'/>
<node id='200011' visible='true' version='1' lat='35.568603' lon='139.549438'/>
<node id='200012' visible='true' version='1' lat='35.568665' lon='139.548962'/>
<node id='200013' visible='true' version='1' lat='35.568671' lon='139.54888'>
<tag k='highway' v='bus_stop'/>
</node>
<node id='200014' visible='true' version='1' lat='35.56871' lon='139.548563'/>
<node id='200015' visible='true' version='1' lat='35.568817' lon='139.54744'/>
<node id='200016' visible='true' version='1' lat='35.568851' lon='139.547054'/>
<node id='200017' visible='true' version='1' lat='35.568879' lon='139.546737'/>
<node id='200018' visible='true' version='1' lat='35.568924' lon='139.546475'/>
<node id='200019' visible='true' version='1' lat='35.568986' lon='139.546241'/>
<node id='200020' visible='true' version='1' lat='35.569071' lon='139.545979'/>
<node id='200021' visible='true' version='1' lat='35.569094' lon='139.545918'/>
<node id='200022' visible='true' version='1' lat='35.569057' lon='139.54587'/>
<node id='200023' visible='true' version='1' lat='35.568969' lon='139.54582'/>
<node id='200024' visible='true' version='1' lat='35.568586' lon='139.545565'>
<tag k='highway' v='bus_stop'/>
</node>
<node id='200025' visible='true' version='1' lat='35.568372' lon='139.545373'/>

その結果、このOSMファイル(tsuzuki_bus_trial2.osm)を、QGISで表示してみたら、こんな感じになりました。

Nodeが追加されています。

しかし、問題は、postGISでダイクストラ計算ができことが重要ですので、まずは、このosmをPostgresql にインポートしてみます。手順はいつも通りですが、ざっと記載しておきます。

C:\Users\ebata>psql -U postgres -h 192.168.0.23 -p 15432
postgres=# create database tsuzuki_bus;
CREATE DATABASE
tsuzuki_bus=# create extension postgis;
CREATE EXTENSION
tsuzuki_bus=# create extension pgrouting;
CREATE EXTENSION

で、postGISが動くDBの作成を完了しました。
で次に、

まだ試してないけど、バス停の追加は多分、これで可能となるはず

で作成した、mapconfig_for_cars_rail_busstop.xml 

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <tag_name name="highway" id="1">
    <tag_value name="bus_stop"/>
    <tag_value name="motorway"          id="101" priority="1.0" maxspeed="130" />
    <tag_value name="motorway_link"     id="102" priority="1.0" maxspeed="130" />
    <tag_value name="motorway_junction" id="103" priority="1.0" maxspeed="130" />
    <tag_value name="trunk"             id="104" priority="1.05" maxspeed="110" />
    <tag_value name="trunk_link"        id="105" priority="1.05" maxspeed="110" />    
    <tag_value name="primary"           id="106" priority="1.15" maxspeed="90" />
    <tag_value name="primary_link"      id="107" priority="1.15" maxspeed="90" />    
    <tag_value name="secondary"         id="108" priority="1.5" maxspeed="90" />
    <tag_value name="secondary_link"    id="109" priority="1.5" maxspeed="90"/>  
    <tag_value name="tertiary"          id="110" priority="1.75" maxspeed="90" />
    <tag_value name="tertiary_link"     id="111" priority="1.75" maxspeed="90" />  
    <tag_value name="residential"       id="112" priority="2.5" maxspeed="50" />
    <tag_value name="living_street"     id="113" priority="3" maxspeed="20" />
    <tag_value name="service"           id="114" priority="2.5" maxspeed="50" />
    <tag_value name="unclassified"      id="117" priority="3" maxspeed="90"/>
    <tag_value name="road"              id="100" priority="5" maxspeed="50" />
  </tag_name> 
  <tag_name name="railway" id="1">
    <tag_value name="subway"              id="101" priority="1.0" maxspeed="40" />
    <tag_value name="rail"              id="101" priority="1.0" maxspeed="40" />
  </tag_name> 
</configuration>

重要なのは、 <tag_value name="bus_stop"/>の部分です。

このXMLファイルを使って、

F:\しゅらばしゅう\有吉先生データ\Transfer(2018)\N07-11_14_GML>osm2pgrouting -f tsuzuki_bus_trial2.osm -c mapconfig_for_cars_rail_busstop.xml -d tsuzuki_bus -U postgres -h 192.168.0.23 -p 15432 -W password

(tsuzuki_bus_trial2.osm は、変更後のOSMファイル)

を実施し、QGISでDBの内容を表示してみました。

ちゃんとNodeが追加されているようです。

しかし、ダイクストラ計算ができるかどうかは、まだ分かりませんので、QGISの地物情報でNode番号を把握して、計算を試みてみました。

 

tsuzuki_bus=# SELECT seq, node, edge, cost FROM pgr_dijkstra('SELECT gid as id,source, target,length as cost, reverse_cost FROM ways',2, 7);
seq | node | edge | cost
-----+------+------+-----------------------
1 | 2 | 25 | 0.002503402202160114
2 | 3 | 1 | 0.003623692651717509
3 | 4 | 26 | 0.0073121202899935804
4 | 5 | 27 | 0.006205490305965455
5 | 6 | 28 | 0.0048274159495506515
6 | 7 | -1 | 0
(6 rows)

ちゃんと出力されているようです。

ようやく、目処がついてきました ―― ヘナヘナと座り込みそうです。

本当にしんどくて辛い夏季休暇でした。

2023,江端さんの技術メモ

Posted by ebata