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 は、

  • OSM の highway タグ

  • → MATSim link の attribute type

として保存します。


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

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

2.1 residential

  • 住宅地内道路

  • 生活道路

  • 低速・低容量

  • 交差点密度が高い

OSM 的には:

people live here

MATSim 的には:

  • freespeed が低め

  • capacity も控えめ

  • 渋滞のボトルネックになりやすい


2.2 tertiary

  • 地区幹線道路

  • 住宅地と幹線をつなぐ役割

  • 生活道路よりは速いが、主要幹線ではない

OSM 的には:

connects neighbourhoods

MATSim 的には:

  • 中程度の freespeed

  • 通過交通と生活交通が混在


2.3 primary

  • 主要幹線道路

  • 都市間・都市内の主要動脈

  • 信号・交差点はあるが、通過交通向き

OSM 的には:

major roads between towns or important parts of a city

MATSim 的には:

  • freespeed が高い

  • capacity も高い

  • 交通流を支配するリンクになりやすい


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

  • この typeMATSim の挙動に直接は使われない

  • しかし:

    • 後処理

    • 可視化

    • フィルタリング

    • 分析(例:primary だけ抽出)

極めて重要

「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"

  • MATSim が内部的に振った link ID

  • OSM の way ID ではない

  • 識別子としてのみ使用


3.2 from, to

from="1806698497"
to="1806698523"
  • MATSim network の node ID

  • 今回は OSM node ID と一致

  • 有向リンク(from → to)


3.3 length="159.51"

  • リンク長 [m]

  • CRS 変換後の座標距離から計算

  • MATSim の移動時間・距離計算の基礎

重要:

  • 現実の道路長と完全一致するとは限らない

  • 曲線道路は直線近似されている


3.4 freespeed="11.11111111111111"

  • 自由流速度 [m/s]

  • 11.11 m/s ≒ 40 km/h

計算:

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 的に「効くパラメータ」「効かないパラメータ」

計算に直接効く

  • length

  • freespeed

  • capacity

  • permlanes

  • modes

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

  • attribute type(primary / residential など)


5. 全体の理解(重要)

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

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

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

OSM の複雑な現実を、

  • node

  • directed link

  • 数値パラメータ

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


6. 次に自然な関心点

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

  • type ごとの freespeed / capacity の妥当性

  • residential が速すぎないか?

  • primary が遅すぎないか?

  • bus を入れたらどう変わるか?

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

次はどこを見ますか?

  • パラメータ調整?

  • network の可視化?

  • bus / pt network の追加?

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"ほぼ使われません

  • 双方向性は link の本数で表現します

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

  • 古い network

  • 手書き network

  • 特殊なカスタム実装

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


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

OSM が一方通行の場合

highway=primary
oneway=yes

MATSim では:

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

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

👉 結果として:

  • 双方向道路:link が2本

  • 一方通行道路:link が1本

どちらも oneway="1"


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

技術的に正しいか?

正しい

  • MATSim の設計通り

  • OsmNetworkReader の標準挙動

  • 世界中の MATSim network がこうなっている


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

目的次第で正しい

  • 経路探索:問題なし

  • 混雑生成:問題なし

  • 方向制約:正しく表現されている


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

⚠️ 説明は必要

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

「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. まとめ(重要)

  • oneway="1" が並ぶのは 正常

  • MATSim は 有向リンク前提

  • 双方向性は link の本数で表現

  • OSM の oneway 情報は 逆向き link の有無に反映

  • network.xml を見て不安になるのは 誰もが通る道


これはむしろ、

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

です。

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

  • 「residential が速すぎないか?」

  • 「capacity は現実的か?」

  • 「bus を入れたらどうなるか?」

どれに進みますか?

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
  • 歩行だけの network

  • 車と完全に分離

これは:

  • 歩行分析専用

  • 車両流と干渉させたくない場合

に使います。


方法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 を使わない

  • 最短距離直線 or 軽量計算

  • 計算コスト低

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

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


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

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

--modes car,walk

② config.xml に walk を追加

  • qsim

  • planscalcroute

  • planscalcroute.walk

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


6. まとめ(要点)

  • modes="car" の network では歩行不可

  • network 作成時に walk を含めるのが正道

  • network / config / plans の3点セットが必要

  • 歩行は MATSim では「特別扱い」されがちなので注意

  • あなたの network 生成ツールは すでに walk 対応可能

 

未分類

Posted by ebata