なぜ MATSim では「実際の緯度・経度を使った network.xml のサンプル」がほとんど存在しないのか

MATSim の network.xml では、緯度・経度(WGS84)をそのまま使わず、投影座標(メートル単位)を使うことが原則だからです。

1. 根本理由:MATSim は「距離」と「速度」をメートル・秒で計算するため

MATSim のルーティング(移動距離、速度、リンク長、渋滞計算など)は
すべてメートル単位の直交座標を前提にしています。

緯度・経度を直接入れると、

  • 1度あたりの距離が緯度で変わる

  • 等距離でないため距離計算が破綻する

  • Dijkstra(最短距離探索)の前提が壊れる

という問題が起きます。

→ だから「WGS84 をそのまま network.xml に使う」ことは MATSim では非推奨。


2. 公式ツール(OSMImporter, MATSim-PT, Via)も “必ず投影変換してから” network.xml を出力する

MATSim の公式ツールはすべて、

  • OSM → network.xml
    を作る際に 自動で投影(UTMやEPSG)に変換します。

よって、ユーザーが緯度・経度をそのまま見る機会がほぼありません。


3. 公式サンプルやチュートリアルも “投影座標前提”

MATSim のチュートリアルで使われるネットワークは、

  • Zurich(EPSG 21781)

  • Berlin(EPSG 31468)

  • Synthetic grid(任意の直交座標)

など すべて投影座標です。

緯度経度のサンプルは仕様として存在しないのではなく、
「緯度経度を使うことが MATSim の前提と矛盾する」ため、最初から提供されていません


4. 緯度経度をそのまま使うと何が起きるのか

もし network.xml に緯度経度を直接書くと:

  • 速度計算が狂う(1度=111km の扱いになる)

  • 距離計算が位置によって変わる

  • ルート探索が不正確になる

  • エージェントが異常速度で移動する

  • QGIS から見ても矩形にならない

MATSim が正しく動きません。


5. では実際の緯度経度はどう処理すればよいか?

通常手順は次のとおりです:

(1) OSMの緯度経度 → 投影座標に変換

例:Fukuoka around Tenjin
→ EPSG: 3099 (JGD2011 / Japan Plane Rectangular CS XVI)

(2) network.xml はこの投影座標で作成

<node id="1" x="137000" y="503200"/>
<node id="2" x="137450" y="503800"/>

(3) 可視化するときだけ、QGISで WGS84に戻して表示する

内部計算は投影座標で、
可視化時だけ緯度経度で OK。


結論

MATSim の philosophy(内部計算仕様)として、network.xml は投影座標で作るのが前提のため、
「緯度経度そのままのサンプル」は存在しない。
存在しないのではなく、理屈上提供できない。

もしかしたら、MATSimって、OSMとの相性がめちゃくちゃに悪くないか? いずれにせよ、

今日一日の努力が全くの無駄であったことが判明した・・・心底、疲れた。

誰が悪いって、ChatGPTが悪い。やつが、緯度・経度版の、network.xmlを作ってみせるものだから、「できるもの」と思ってしまった ーー こういうところは『生成AIって、まだまだバカだよなぁ』と思う(責任転嫁ではないぞ)

未分類

Posted by ebata