🗺️

PBFデータをGeoJSONとMBTilesに変換する方法

2024/11/26に公開

はじめに

以前の記事で、PBF(Protocolbuffer Binary Format)形式のデータをPostGISにインポートし、QGISで表示する方法を解説しました。今回はその続編として、PBFデータをGeoJSON形式とMBTiles形式に変換する手順を紹介します。
この手法では、ローカル環境でのデータ確認やWeb地図でのタイル配信を見据えた準備として有用です。今後の記事では、このMBTiles形式を活用してWeb(ブラウザ)地図として表示する方法についても紹介していきたいと思います。

本記事ではMac環境を前提に説明しますが、Windows環境での注意点も各セクションで補足します。

必要なツール

以下のツールを事前に準備してください:
• osmium-tool:PBFデータのフィルタリングや変換に使用
• tippecanoe:GeoJSONデータをMBTilesに変換するツール

注意:各ツールのインストール方法は公式サイトやパッケージマネージャ(Homebrewなど)をご参照ください。

手順概要

  1. PBFデータから必要な情報を抽出(例: 道路データ)。
  2. 抽出したデータをGeoJSONに変換。
  3. GeoJSONをMBTilesに変換。

以下、各ステップについて詳細に解説します。

1. PBFデータから必要なデータを抽出

まず、osmium-tool を使ってPBFデータをフィルタリングし、必要なデータだけを抽出します。ここでは、例として道路データ(highway タグ)を抽出します。

コマンド例(Mac)

osmium tags-filter input.osm.pbf -o roads.osm.pbf w/highway
  • input.osm.pbf:元のPBFデータファイル。
  • roads.osm.pbf:抽出結果(道路データ)のPBFファイル。
  • w/highway:highway タグを持つウェイ(ライン)データを抽出。

nodeの場合はn/highway 等適宜フィルタしたいものに合わせて変更ください。

Windowsの場合の補足

  • コマンドのファイルパスを絶対パス形式 (C:\path\to) またはスラッシュ形式 (C:/path/to) で指定してください。

  • WSL(Windows Subsystem for Linux)を使用する場合、以下のようにパスを記述します:

osmium tags-filter /mnt/c/path/to/input.osm.pbf -o /mnt/c/path/to/roads.osm.pbf w/highway

2. PBFデータをGeoJSONに変換

次に、osmium export を使用して、PBFデータをGeoJSON形式に変換します。

コマンド例(Mac)

osmium export roads.osm.pbf -o roads.json
  • roads.osm.pbf:抽出済みのPBFデータ。
  • roads.json:変換後のGeoJSONデータ。

GeoJSON形式は、軽量なデータ構造で多くのGISツールやWeb地図ライブラリ(例: MapLibre、Leafletなど)で利用できます。

PBFを直接変換することも可能ですが、今回は軽量な中間ファイルを介してデータを途中で確認、加工することも想定してGeojsonを経由しています。

Windowsの場合の補足

ファイルパスの指定に注意してください。WSLを使う場合は次のように記述します:

osmium export /mnt/c/path/to/roads.osm.pbf -o /mnt/c/path/to/roads.json

3. GeoJSONをMBTiles形式に変換

最後に、tippecanoe を使用してGeoJSONをMBTiles形式に変換します。

コマンド例(Mac)

tippecanoe -o roads.mbtiles --minimum-zoom=0 --maximum-zoom=14 roads.json
  • roads.json:GeoJSON形式のデータ。
  • roads.mbtiles:出力されるMBTilesファイル。
  • --minimum-zoom と --maximum-zoom:生成するタイルのズームレベルを指定。

データ量が多い場合の対処策

大量のデータを処理する際、tippecanoe で失敗することがあります。以下のオプションを使用すると、タイル生成時にデータ量を間引いて処理が可能です:

  • フィーチャをランダムに間引く:
--drop-fraction-as-needed
  • 密集している部分を優先的に間引く:
--drop-densest-as-needed
  • フィーチャの削減率を指定(例: 50%削減)
--drop-rate=0.5

例:

tippecanoe -o roads.mbtiles --minimum-zoom=0 --maximum-zoom=14 --drop-densest-as-needed roads.json

Windowsでのツールインストールについて

  1. osmium-tool
  • Windows用のネイティブバイナリは提供されていないため、WSLまたはDockerを使用することを推奨します。
  • WSL環境でUbuntuをインストールし、以下を実行してosmium-toolをセットアップ:
sudo apt update
sudo apt install osmium-tool
  1. tippecanoe
    Windowsでもソースコードをビルドして使用可能ですが、手間がかかるためWSLでインストールするのがおすすめです:
sudo apt install tippecanoe

WSL内でのファイルパス指定
WindowsのファイルをWSL上で操作する場合、以下のように指定します:

/mnt/c/path/to/input.osm.pbf

まとめ

PBFから必要なデータを抽出:

osmium tags-filter input.osm.pbf -o roads.osm.pbf w/highway

GeoJSONに変換:

osmium export roads.osm.pbf -o roads.json

MBTilesに変換:

tippecanoe -o roads.mbtiles --minimum-zoom=0 --maximum-zoom=14 roads.json

これで、PBFデータをGeoJSONやMBTiles形式に変換する手順が完了しました。今後の記事では、生成したMBTilesファイルを使ってWeb地図としての配信方法も解説してみたいと思います。

この手順が少しでも参考になれば幸いです。

Discussion