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 重要なポイント(研究用途的に)
-
この
typeは MATSim の挙動に直接は使われない -
しかし:
-
後処理
-
可視化
-
フィルタリング
-
分析(例: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
計算:
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 対応可能