こぼれネット

OSM → MATSim 変換後の network.xml を読むための実務向け説明

<attribute name="type" class="java.lang.String">residential</attribute> <attribute name="type" class="java.lang.String">primary</attribute> <attribute name="type" class="java.lang.String">tertiary</attribute> のアトリビュートの種類について説明をお願いします。
また、 <link id="203" from="1806698497" to="1806698523" length="159.5139984301562" freespeed="11.11111111111111" capacity="1000.0" permlanes="1.0" oneway="1" modes="car"> の各パラメータについても説明をお願いします。

以下、OSM → MATSim 変換後の network.xml を読むための実務向け説明として整理します。
定義論ではなく、「MATSim で何に使われ、どう効くか」を軸に書きます。


1. <attribute name="type"> とは何か

<attribute name="type" class="java.lang.String">residential</attribute>
<attribute name="type" class="java.lang.String">primary</attribute>
<attribute name="type" class="java.lang.String">tertiary</attribute>

結論

これは OSM の highway=* タグを、そのまま MATSim の link attribute として持ち込んだものです。

MATSim 標準の OsmNetworkReader は、

として保存します。


2. 各 type の意味(OSM 的・交通工学的)

以下は OSM の公式定義+実務的な解釈です。

2.1 residential

OSM 的には:

people live here

MATSim 的には:


2.2 tertiary

OSM 的には:

connects neighbourhoods

MATSim 的には:


2.3 primary

OSM 的には:

major roads between towns or important parts of a city

MATSim 的には:


2.4 重要なポイント(研究用途的に)

極めて重要

「MATSim が計算に使う値」ではなく
「人間が意味づけするための属性」

という位置づけです。


3. <link ...> 各パラメータの意味

対象:

<link id="203"
      from="1806698497"
      to="1806698523"
      length="159.5139984301562"
      freespeed="11.11111111111111"
      capacity="1000.0"
      permlanes="1.0"
      oneway="1"
      modes="car">

3.1 id="203"


3.2 from, to

from="1806698497"
to="1806698523"

3.3 length="159.51"

重要:


3.4 freespeed="11.11111111111111"

計算:

11.111... × 3.6 = 40 km/h

意味:

  • 混雑していないときの理論最大速度

  • MATSim の travel time 計算に直接使われる


3.5 capacity="1000.0"

  • リンク容量 [veh/hour]

  • 1時間あたりに流せる車両数の目安

注意:

  • 現実の道路容量の厳密再現ではない

  • MATSim の渋滞生成モデル用のパラメータ


3.6 permlanes="1.0"

  • 車線数

  • 実数なのは MATSim の内部仕様

意味:

  • 容量計算や queue spillback に影響

  • ただし capacity の方が効くことが多い


3.7 oneway="1"

  • 一方通行

  • 1 = true

  • 0 = 双方向(※ 双方向の場合は逆向き link も生成される)

OSM の oneway=yes を反映


3.8 modes="car"

  • このリンクを通行可能な交通手段

  • 今回は --modes car で生成したため car のみ

他の例:

modes="car,bus"
modes="walk,bike"

4. MATSim 的に「効くパラメータ」「効かないパラメータ」

計算に直接効く

計算に直接は効かない(が超重要)


5. 全体の理解(重要)

この1本の link は、MATSim 的には:

「from node 1806698497 から to node 1806698523 へ
長さ約160m、自由流40km/h、容量1000veh/h、
車1車線の一方通行道路(住宅・幹線種別あり)」

という 完全に交通工学的な抽象道路です。

OSM の複雑な現実を、

に落とし込んだものが MATSim network です。


6. 次に自然な関心点

ここまで理解できたら、次は自然に:

という **「モデルの現実性」**の話に進めます。

次はどこを見ますか?

network.xmlでは、全部、oneway="1"になっていますが、これで正しいのでしょうか?

結論から言います。

はい、現状の oneway="1" が並んでいるのは「異常ではない」が、
そのまま受け入れてよいかは「目的次第」です。

これは MATSim + OSM 変換で 非常によくある・意図された挙動です。
以下、理由と「何が起きているのか」を段階的に説明します。


1. まず重要な前提(誤解しやすい点)

❌ 誤解

OSM の道路は双方向が多い
→ network.xml も oneway="0" が多いはず

✅ 実際

MATSim の network は「有向リンク」が基本
→ 双方向道路でも「片方向リンク × 2本」で表現する


2. MATSim における「oneway」の意味

<link ... oneway="1" />

この oneway="1" は、

「この link オブジェクトは一方向リンクである」

という意味であり、

「この道路が現実世界で一方通行である」

という意味ではありません。

ここが最大の混乱ポイントです。


3. 双方向道路はどう表現されているか

OSM 側(例:residential, oneway 指定なし)

highway=residential
(oneway タグなし = 双方向)

MATSim 側では…

2本の link に分解されます

<link id="203" from="A" to="B" oneway="1" />
<link id="204" from="B" to="A" oneway="1" />

つまり:

視点 意味
現実世界 双方向道路
MATSim network 有向リンク2本
各 link oneway="1"

👉 だから「全部 oneway=1」に見える


4. では「oneway=0」はいつ出るのか?

MATSim network では、実は:

oneway="0" が出るケースは:

OSM → OsmNetworkReader → network.xml
という正統ルートでは、基本的に すべて oneway="1" になります。


5. OSM の oneway=yes はどう反映されているか

OSM が一方通行の場合

highway=primary
oneway=yes

MATSim では:

<link from="A" to="B" oneway="1" />

逆向きリンクは作られません

👉 結果として:

どちらも oneway="1"


6. 正しいか?という問いへの答え

技術的に正しいか?

正しい


交通モデルとして正しいか?

目的次第で正しい


研究・説明的に誤解を招かないか?

⚠️ 説明は必要

論文・資料では必ずこう書くべきです:

「MATSim network は有向リンクで構成されており、
双方向道路は2本の一方向リンクとして表現されている」


7. 確認したい場合のチェック方法

(1) 同じ node ペアの逆向き link があるか

zgrep 'from="1806698497" to="1806698523"' output_network.xml.gz
zgrep 'from="1806698523" to="1806698497"' output_network.xml.gz

8. まとめ(重要)


これはむしろ、

「network.xml をちゃんと読めている証拠」

です。

次に気になるのはたいてい:

どれに進みますか?

network.xmlには、modes="car" になっています。エージェントで歩行をさせたい場合はどうすれば良いですか?

結論から言います。

いまの modes="car" の network.xml のままでは、歩行エージェントは動けません。
歩行をさせるには、network 側と設定(plans / config)の両方を整える必要があります。

以下、「何をどう変えるか」を 実務手順として説明します。


1. なぜ歩行できないのか(前提)

いまの network.xml では、各リンクが例えばこうなっています。

<link ... modes="car" />

MATSim の原則は:

エージェントは、自分の legMode が含まれるリンクしか通れない

つまり:

エージェントの mode link の modes 通れる?
car car
walk car
walk walk
walk car,walk

👉 歩行をさせるには、link に walk を含める必要がある


2. 方法は大きく3つある(重要)

方法A(最も正統・おすすめ)

network 作成時に walk を含める

あなたの Osm2NetworkCli は CLI で --modes を受け取れる構成です。

実行例

java -jar target/matsim-osm2network-1.0.0.jar \
  --osm hirohakama.osm \
  --out output_network.xml.gz \
  --toCRS EPSG:6685 \
  --modes car,walk

すると network.xml は:

<link ... modes="car,walk" />

になります。

車も歩行も同じ network を共有
✅ 最も MATSim 的
✅ 将来 bike / bus を足しやすい


方法B(歩行専用 network を作る)

--modes walk

これは:

に使います。


方法C(後処理で network.xml を書き換える)※非推奨

modes="car" → modes="car,walk"

を一括置換する方法。

❌ 再現性が低い
❌ 論文・研究向きでない
❌ 将来の自分が困る


3. network を直しただけでは「まだ足りない」

ここが重要ポイントです。

3.1 エージェント(plans.xml)側

歩行 leg はこうなっている必要があります。

<leg mode="walk">

3.2 config.xml 側(必須)

(1) qsim に walk を許可

<module name="qsim">
  <param name="mainModes" value="car,walk" />
</module>

(2) routing の設定

<module name="planscalcroute">
  <param name="networkModes" value="car,walk" />
</module>

(3) walk の速度(重要)

<module name="planscalcroute.walk">
  <param name="teleportedModeSpeed" value="1.34" />
</module>

※ 1.34 m/s ≒ 4.8 km/h(標準的歩行速度)


4. 歩行を「network 上で歩かせる」か「テレポート」にするか

MATSim では歩行に 2通りあります。

A. network walk(物理的にリンクを歩く)

👉 研究用途・都市スケール分析向き

B. teleported walk(距離÷速度)

👉 大量人口・簡易分析向き

今の network を使うなら、あなたは A を選ぶ立場です。


5. 実務的なおすすめ手順(あなた向け)

① network を作り直す(最重要)

--modes car,walk

② config.xml に walk を追加

③ plans.xml に <leg mode="walk"> を入れる


6. まとめ(要点)

 

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