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 を使うことに意味がある

理由:

  1. リンク属性(freespeed / capacity / lanes / allowedModes)の解釈が MATSim と完全一致

  2. 将来 MATSim のバージョンが変わっても、
    network.xml の生成ロジックが MATSim 側で追従される

  3. 論文・研究・再現性の観点で

    「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 を作るためだけの専用工具」

  • 一度作ってしまえば、運用は極めて単純

 

未分類

Posted by ebata