OpenStreetMap のデータを扱う(Windows 上)
【概要】
このページでは、Windows 上で OpenStreetMap(OSM、誰でも自由に利用・編集できる世界地図データ)のデータを扱う手順を説明する。具体的には、データ処理ツール Osmosis(OpenStreetMap のデータを読み書き・加工するコマンドラインツール)の導入と、ダウンロードした地図データから緯度・経度の範囲(バウンディングボックス)を指定して特定の地域を切り出す操作を扱う。
Osmosis は Java で書かれているため、動作には Java 実行環境(JRE/JDK)が必要である。
【目次】
【関連する外部ページ】
- OpenStreetMap 公式サイト
- Osmosis(OpenStreetMap Wiki)
- Osmosis のダウンロード(GitHub リリース)
- 日本の OSM データ配布元(Geofabrik)
- Java 実行環境(Eclipse Temurin / Adoptium)
- 7-Zip(bzip2 形式の展開に使用)
【サイト内の関連情報】
第1章 前準備
Java 実行環境のインストール
Osmosis は Java 製のため、先に Java 実行環境が必要である。Osmosis 0.49 系は Java 17 以上で動作する。Java が未導入の場合は、Adoptium(Eclipse Temurin)などから Windows 向けの JDK 17 以上を入手してインストールする。インストール後、コマンドプロンプトで次を実行し、バージョンが表示されることを確認する。
java -version
Osmosis のインストール
Osmosis は、OpenStreetMap のデータを読み書き・加工するコマンドラインツールである。GitHub の最新リリースから実行用の zip ファイル(例:osmosis-0.49.2.zip)をダウンロードし、任意のフォルダ(例:C:\osmosis)に展開する。展開後、bin フォルダ内の osmosis.bat が実行用のコマンドである。
zip のダウンロードは、ブラウザのほか、コマンドプロンプトの curl(Windows 10 以降に標準搭載)でも行える。
curl -L -o osmosis-0.49.2.zip https://github.com/openstreetmap/osmosis/releases/download/0.49.2/osmosis-0.49.2.zip
Python が利用できる環境では、標準ライブラリの urllib.request でダウンロードしてもよい。次のコードは単体で実行できる。
import urllib.request
url = "https://github.com/openstreetmap/osmosis/releases/download/0.49.2/osmosis-0.49.2.zip"
urllib.request.urlretrieve(url, "osmosis-0.49.2.zip")
print("done")
展開した bin フォルダにパスを通すか、以降のコマンドで osmosis の代わりに osmosis.bat のフルパス(例:C:\osmosis\bin\osmosis.bat)を指定して実行する。
bzip2 形式を展開するツールの準備
日本全体の OpenStreetMap データは bzip2 形式(拡張子 .osm.bz2)で配布される。Windows は bzip2 形式を標準では展開できないため、7-Zip を導入する。7-Zip はコマンドライン(7z)でも展開でき、本ページではこれを使う。
第2章 OpenStreetMap からのデータの切り出し(緯度,経度を指定)
日本全体の OpenStreetMap データ(bzip2 で圧縮された XML 形式のファイル)から、緯度・経度で指定した範囲を切り出す手順である。
まず、日本全体のデータを Geofabrik の配布サーバから入手する。コマンドプロンプトで curl を使う場合は次のとおりである。
curl -L -o japan-latest.osm.bz2 https://download.geofabrik.de/asia/japan-latest.osm.bz2
Python の標準ライブラリでダウンロードする場合は、次のコードで行える。このコードは単体で実行できる。
import urllib.request
url = "https://download.geofabrik.de/asia/japan-latest.osm.bz2"
urllib.request.urlretrieve(url, "japan-latest.osm.bz2")
print("done")
次に、7-Zip で bzip2 形式を展開し、japan-latest.osm を作る。-aoa は既存ファイルを確認なしで上書きする指定である。
"C:\Program Files\7-Zip\7z.exe" e -aoa japan-latest.osm.bz2
最後に、Osmosis でバウンディングボックス(緯度・経度で指定する四角い範囲)を指定して、福岡市と糸島市にあたる範囲をそれぞれ別ファイルに切り出す。--rx は --read-xml(XML ファイルの読み込み)、--bb は --bounding-box(範囲の指定)、--wx は --write-xml(XML ファイルへの書き出し)の短縮形である。left は左端の経度、right は右端の経度、top は上端の緯度、bottom は下端の緯度を表す。
osmosis --rx japan-latest.osm --bb left=130.2037 bottom=33.4308 right=130.5053 top=33.7147 --wx fukuoka-city.osm
osmosis --rx japan-latest.osm --bb left=130.0355 bottom=33.4643 right=130.2938 top=33.6690 --wx itoshima-city.osm