OpenStreetMapからSUMO用ネットワークファイルを作る方法
~なぜその作業をするのか?を丁寧に解説~
交通シミュレーションソフト「SUMO」を使うには、まず道路の地図データをSUMO用ネットワークファイルに変換する必要があります。
ここでは、OpenStreetMap(OSM)のデータを使って、そのネットワークファイルを作る手順を紹介します。
そもそも「なぜ地図データが必要なのか?」
SUMOは道路の形や信号の位置をもとにシミュレーションを行います。
つまり、道路の情報がなければシミュレーションできないのです。
「じゃあ、自分で描けばいいのでは?」と思うかもしれません。
確かにSUMOには NETEDIT というツールがあり、自分で道路を一本ずつ描けます。
でも…
- 自分で作るのはとても大変
- 実際の道路とズレが出てしまう
こうした理由から、最初はOSMの実データを利用するのが一番楽で正確なんです。
手順の全体像
- OpenStreetMapから地図データをダウンロード
- netconvertで変換してSUMO形式にする
- できたファイルをSUMOで読み込む
1. OpenStreetMapから地図を取得する
まずは実際の道路データを手に入れます。
「なぜOSMを使うのか?」
それは…
- 世界中の道路データが誰でも無料で入手できる
- 精度が高く、日々更新されている
からです。
手順は次の通りです:
1.OpenStreetMap公式サイト を開く
2.調べたい地域を検索

「エクスポート」ボタンで範囲を指定して保存

すると「map.osm」というファイルが手に入ります。
(ダウンロードフォルダに保存されているはずです。)

このファイルを例えば D:¥SUMO¥LESSON1 のような場所に移動します。

【豆知識】日本語環境のコンピュータでは、バックスラッシュ(\) が 円記号(¥) と同じ文字コード(Shift_JISなどでは 0x5C)で扱われています。そのため、プログラムやコマンドで表示されると、フォントや環境によって「\」と表示されたり「¥」と表示されたりします。
見た目は違っても、機能的には同じ文字ですので、どちらも同じものとして理解してください。
2. OSMデータをSUMO形式に変換する
ダウンロードした「map.osm」はこのままではSUMOは読めません。
→ OSMの形式(.osm)は汎用的な地図データなので、SUMOが理解できる形式(.net.xml)に翻訳する必要があるのです。
変換には「 netconvert」
というツールを使います。これはSUMOをインストールしたときに同時にインストールされています。
??
スタートメニューにない!?
そうなんです。
実は、これは前の記事で紹介したコマンドプロンプトを使って起動するのです。
下の検索窓で「cmd」と打ち込んでコマンドプロンプトを起動してください。

基本のコマンド
前述の記事に書いた 「cd /d D:¥SUMO¥LESSON1」でチェンジディレクトリをして、
netconvert --osm-files map.osm -o network.net.xml
と打ち込んでください。

ネットコンバートが起動し、map.osm を network.net.xml に変換します。

ログを見る限り、変換自体はちゃんと成功(Success)しています。ただし、途中でたくさんの Warning(警告) が出ています。
変換時に出る「Warning」って何?
実際に netconvert
を動かすと、たくさんのメッセージが出てきます。
しかし、最後に Success.
と出ていれば変換は成功していますのでご安心してください。
よく出る警告の意味
Discarding unusable type 'waterway.stream'
→ 川や鉄道など、道路以外のデータは使わないので無視しますという意味Ambiguity in turnarounds computation at junction
→ 交差点の形が複雑で、Uターンの計算に迷ったという警告The traffic light 'xxxx' does not control any links
→ 信号機の情報がOSMにあるけれど、SUMOでつなぐ道路がなかったので削除したという意味Speed of connection reduced by … due to turning radius
→ 曲がり角が急すぎるので、自動的に減速設定にしたという調整
つまり、どれも「道路データをきれいに整えるための調整報告」で、エラーではありません。
では、作業フォルダを確認してみて下さい。

上記のようにファイルが出現していたら成功です!!
いよいよ、NETEDIT(ネットエディット)で確認してみましょう!
スタートメニューから

を立ち上げて、、
左上の「File」→「Open Network」から出来立ての「network.net.xml」を開いてください。

無事、鈴鹿サーキットが表示されましたか??
3. オプションで日本向け設定にする
「実は、、ごめんなさい。日本の道路は少し日本向けの設定を追加しないといけないので、もう一度やり直してください。。」
→ SUMOは世界中で使われるので、初期設定が“右側通行”なのです。
日本でシミュレーションするなら、下記のとおり少し設定を足す必要があります
netconvert --osm-files map.osm -o network.net.xml --lefthand --speed-in-kmh --junctions.join --tls.guess-signals --sidewalks.guess.from-permissions --crossings.guess
このように、コマンド後に「 –」(スペース、ハイフン、ハイフン)のあとに書きのような注文をつけます。
--lefthand
: 日本の左側通行を設定--speed-in-kmh
: km/hで扱いやすくする--junctions.join
: 小さな交差点をまとめる--tls.guess-signals
: 信号を自動推定--sidewalks.guess.from-permissions
: 歩道を追加--crossings.guess
: 横断歩道を追加
これで、先ほどと同様にネットワークファイル(network.net.xml)が出来上がります。
ここまでで、OpenStreetMapのデータを使ってネットワークファイルを作る基本の流れは完成です。
ただし、この方法では細かい道路まで全て取り込んでしまうため、広域でネットワークを再現したい場合にはデータが複雑すぎて扱いにくくなることがあります。
そうしたときに便利なのが Overpass Turbo を使って幹線道路だけを抽出する方法です。
ただし、この手順は少し“上級者編”になります。
なぜなら、Overpass Turboの出力はそのままではSUMOに変換できず、Python(パイソン)というプログラミング言語を使って私が作成した独自の変換プログラムを使ってデータを整える作業(並び替え)が必要になるからです。
つまり、まずは Pythonのインストールから始める必要があります。
次回はこの「上級者編」について、Pythonの導入から順を追ってご説明します。どうぞお楽しみに!