バウンディングボックスでOpenStreetMapデータ部分的に抽出する
はじめに
OpenStreetMap (OSM) データは、地理データ分析や地図作成において強力なデータソースです。しかし、利用するデータが大規模な領域をカバーしている場合、自身の環境で利用するには、取り込みや処理が重くなることがあります。
本記事では、以下の2つの例に関して、特定の領域に絞ったデータの利用方法を解説します。
- osm2pgsql を使用してPostgreSQL に部分的に取り込む
- osmium-tool を使用してデータを抽出する
尚、今回は手元にPBF形式のデータを持っているケースを例にして事例を紹介しています。
OSMのデータ形式(主にPBF、OSM)についてはこちらの記事もあわせてご参考ください。
.pbfと.osm
1. osm2pgsql を使った PostgreSQL へのデータ取り込み(例:神田周辺)
osm2pgsql
を使用して、大規模な PBF データから PostgreSQL の PostGIS 拡張に取り込む方法を解説します。
Postgresへの取り込みについては下記の記事もあわせてご参考ください。
QGISでPostGISでのPBFデータの読み込み方法
OSMデータをPostgreSQLに取り込む:hstore拡張の有無による違い
必要なツール
- osm2pgsql
- PostgreSQL + PostGIS 拡張
コマンド例
手元のPBF データから神田周辺(バウンディングボックス指定)のデータのみを取り込んでみます。
osm2pgsql -c -d my_database -U $(whoami) --bbox 139.766,35.692,139.773,35.701 --slim -r pbf kanto-latest.osm.pbf
今回のサンプルはGeofabrikでダウンロード可能なkanto_region(約394M)のデータを活用します。kanto-latest.osm.pbf
オプションの説明
- --bbox 139.766,35.692,139.773,35.701: 神田周辺のバウンディングボックス(経度・緯度)を指定。
バウンディングボックスの作成についてはklokantechのサイトが便利です。
地図上でバウンディングボックスを指定して、下部のCopy & PasteからCSVを選ぶと下記のコマンドに入力する値を得られます。
- -d my_database: PostgreSQL のデータベース名。
- --slim: 中間テーブルを作成して効率的にデータを処理。
実行後の確認(QGISで表示)
2. osmium-tool を使った特定領域の抽出(例:上野周辺)
osmium-toolではPBFデータから特定領域のデータを抽出(pbfからpbf)することが可能です。ここでは上野周辺のデータを抜き出してみます。
必要なツール
- osmium-tool
コマンド例
以下のコマンドで、上野周辺(経度・緯度指定)のデータを新しい PBF ファイルに抽出します。
osmium extract --bbox 139.771,35.709,139.780,35.718 -o ueno.osm.pbf kanto-latest.osm.pbf
オプションの説明
- --bbox 139.771,35.709,139.780,35.718: 上野周辺のバウンディングボックスを指定。
- -o ueno.osm.pbf: 抽出結果を新しい PBF ファイルとして保存。
抽出後の確認(QGISで表示)
本記事に表示されている地図には、OpenStreetMapのデータを利用しています。
https://www.openstreetmap.org/copyright
まとめ
今回2種類の方法、osm2pgsql と osmium-tool を使った領域限定データの取り扱い方法を紹介しました。地域を抽出することができるツールなどは他にもあるようですので、OSM データを効率的に扱うため、それらを利用して、必要な領域を抽出して利用するのが効果的かと思います。これにより実際の処理時間も短縮できるので、作業も効率的に実施できるようになるかと思います。
メリット
1. 処理の軽量化: 必要な領域のみを取り込むことで、データベースやツールの負荷を軽減。
2. 取り込み時間の短縮: データサイズが小さくなるため、処理速度が向上。
3. 柔軟性: PostGIS や PBF ファイル形式のまま活用可能。
本記事がOSMデータを自分のプロジェクトで効率的に活用する助けになると幸いです。
Discussion