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 はこの投影座標で作成
(3) 可視化するときだけ、QGISで WGS84に戻して表示する
内部計算は投影座標で、
可視化時だけ緯度経度で OK。
結論
MATSim の philosophy(内部計算仕様)として、network.xml は投影座標で作るのが前提のため、
「緯度経度そのままのサンプル」は存在しない。
存在しないのではなく、理屈上提供できない。
もしかしたら、MATSimって、OSMとの相性がめちゃくちゃに悪くないか? いずれにせよ、
今日一日の努力が全くの無駄であったことが判明した・・・心底、疲れた。
誰が悪いって、ChatGPTが悪い。やつが、緯度・経度版の、network.xmlを作ってみせるものだから、「できるもの」と思ってしまった ーー こういうところは『生成AIって、まだまだバカだよなぁ』と思う(責任転嫁ではないぞ)