Javaを使ったMATSim network.xml.gz 構築手順メモ(hirohakama)
Javaを使ったMATSim network.xml.gz 構築手順メモ(hirohakama)
1. 目的
OpenStreetMap から取得した OSM ファイルを入力として、
MATSim で利用可能な network.xml.gz を安定的・再現可能に生成する。
対象は以下。
-
入力:
hirohakama.osm -
出力:
output_network.xml.gz -
座標系:
EPSG:6685(日本測地系・平面直角座標) -
利用モード:
car
2. なぜ Python プログラムではなく、MATSim 公式 API を使うのか
2.1 当初の疑問
-
OSM → network 変換は Python でも書ける
-
実際、Python 版の変換スクリプトもすでに作成済み
-
それでも MATSim の有効性を示すなら、公式ツールを使うべきではないか? という疑問が生じた
2.2 結論
network.xml は「MATSim の内部仕様そのもの」であり、
MATSim 自身が生成した network.xml を使うことに意味がある
理由:
-
リンク属性(freespeed / capacity / lanes / allowedModes)の解釈が MATSim と完全一致
-
将来 MATSim のバージョンが変わっても、
network.xml の生成ロジックが MATSim 側で追従される -
論文・研究・再現性の観点で
「MATSim 標準の OsmNetworkReader を用いて生成した network を使用した」
と明記できる
結論として、
Python は補助・可視化・後処理に使う
network.xml の生成は MATSim に任せる
という役割分担にした。
3. 現在のディレクトリ構成(WSL)
/home/ebata/matsim-example-project/hirohakama/
├── hirohakama.osm
├── pom.xml
├── target/
│ ├── matsim-osm2network-1.0.0.jar
│ └── original-matsim-osm2network-1.0.0.jar
└── src/
└── main/
└── java/
└── net/
└── kobore/
└── matsim/
└── Osm2NetworkCli.java
補足(Windows から見たパス)
\\wsl$\Ubuntu\home\ebata\matsim-example-project\hirohakama\
4. 各ファイルの役割
4.1 hirohakama.osm
-
OpenStreetMap からダウンロードした生の地図データ
-
XML 形式
-
今後、エリアを変えればこのファイルだけ差し替える
4.2 Osm2NetworkCli.java
パス:
src/main/java/net/kobore/matsim/Osm2NetworkCli.java
役割:
-
MATSim の
OsmNetworkReaderをラップした CLI(コマンドラインツール) -
以下を担当:
-
OSM 読み込み
-
利用 highway の限定
-
モード指定(car 等)
-
CRS 変換(EPSG:4326 → EPSG:6685)
-
network.xml.gz の出力
-
このファイルは:
-
今後 network の作り方を変えたくなった時に編集する
-
普段は直接触らない
-
しかし 残しておく必要がある(再ビルド用)
4.3 pom.xml
役割:
-
Maven のビルド定義
-
以下を明示的に設定している:
-
Java 17
-
MATSim 15.0
-
GeoTools EPSG 辞書(
gt-epsg-hsql) -
OSGeo リポジトリ
-
Shade Plugin(fat jar 作成)
-
署名ファイル除外(
Invalid signature file digest対策) -
Main class 指定
-
この pom.xml によって「java -jar で動く単一 JAR」が作られる
4.4 target/matsim-osm2network-1.0.0.jar
役割:
-
実行ファイル
-
network.xml.gz を作るだけなら これだけあれば良い
-
Java ソースを触らない限り、再ビルド不要
5. ビルド手順(必要な場合のみ)
Java ソースを変更した場合のみ実行。
cd /home/ebata/matsim-example-project/hirohakama
mvn -q -DskipTests clean package
成功すると:
target/matsim-osm2network-1.0.0.jar
が生成される。
6. network.xml.gz の生成手順(通常作業)
cd /home/ebata/matsim-example-project/hirohakama
java -jar target/matsim-osm2network-1.0.0.jar \
--osm hirohakama.osm \
--out output_network.xml.gz \
--toCRS EPSG:6685 \
--modes car
実行ログ例
[INFO] OSM : hirohakama.osm
[INFO] OUT : output_network.xml.gz
[INFO] toCRS : EPSG:6685
[INFO] modes : [car]
[INFO] highways : [motorway, motorway_link, trunk, ...]
成功すると、同ディレクトリに
output_network.xml.gz
が生成される。
7. 深いディレクトリ構造についての補足メモ
src/main/java/net/kobore/matsim/
という深さは、
-
Maven の規約
-
Java の package とディレクトリの 1 対 1 対応
-
クラス名衝突防止(世界規模)
という Java の設計思想そのもの。
個人研究・小規模用途としては冗長だが、
-
MATSim
-
GeoTools
-
Java エコシステム
と共存する以上、受け入れるのが最短ルート。
8. 今後の使い方方針(整理)
-
OSM を変える
→hirohakama.osmを差し替える -
network 条件を変える
→Osm2NetworkCli.javaを編集 →mvn package -
普段の作業
→ jar を実行するだけ
9. まとめ(判断の記録)
-
Python 版は「自分で制御できる」利点がある
-
しかし MATSim network の正当性・再現性・説明責任を考え、
-
network 生成は MATSim API に委ねた
-
-
この Java プログラムは
「network.xml を作るためだけの専用工具」 -
一度作ってしまえば、運用は極めて単純