.pbfと.osm


# はじめに
OpenStreetMap（OSM）のデータを取り扱う際、.osmあるいは.pbfという形式でデータを受け取る（取得する）ことが多いかと思います。
これまで、筆者のいくつかの記事でPBFの取り扱いを紹介しているのですが、実際には様々な環境で地図データを取り扱う上で、元々のOSMデータの形式との相互変換が発生することもあります。
そのため、本記事ではPBFデータの基本理解として、**OSMのデータ形式である.osmと、保存・転送効率を最大化するために利用される.pbf** の違いと関係についてざっくりと解説します。

本記事を最初に読む方も、続けて他の記事などもご参考いただければと思います。(記事末尾参照）

### 1. OSMデータの基礎：.osm形式とは？

OSMのデータ形式は、基本的にXML形式の.osmファイルです。この形式では、以下の特徴があります：
- 人間が読める：XMLの構造でデータが記述されており、テキストエディタ等で中身を確認できます。
- データが明確：ノード（ポイント）、ウェイ（ライン・ポリゴン）、リレーション（複雑な構造）など、OSMのデータ構造がそのまま記録されています。
- ファイルサイズが大きい：非圧縮のXML形式で記録されるため、データサイズが非常に大きくなります。

### 2. PBF形式とは？

PBF（Protocolbuffer Binary Format）は、OSMのデータをより効率的に保存・転送するためのフォーマットと理解すれば良いかと思います。.osm.pbfという拡張子で表されます。

PBFの特徴
- 高圧縮率：.osm形式と比較して大幅にサイズが小さくなります（数分の一に圧縮可能）。
- バイナリ形式：データをバイナリ形式で保存するため、ファイルの読み取りや処理が高速です。
- 非可読：XMLのように人間が直接読める形式ではありません。

### 3. OSMとPBFの関係

基本的な理解
- .osmは元のデータ形式：OSMデータはXML形式で記録され、人間が読める構造を持っています。
- .pbfは圧縮された保存形式：OSMデータを効率よく保存・転送するために変換されたフォーマットです。

相互変換

.osmと.pbfは相互変換可能です。具体的には、以下のツールを利用します：
- osmium-tool（高速・高機能な変換ツール）
- GDAL（地理データ処理全般をサポートするツール）

変換例：

.pbf → .osm：
```bash
osmium cat input.pbf -o output.osm
```
.osm → .pbf：
```bash
osmium cat input.osm -o output.pbf
```

変換後もデータの内容に違いはありません。ただし、ファイルサイズや読み取り速度が異なるため、用途に応じて形式を選ぶ必要があります。

### 4. PBFの利点と用途

PBF形式は、主に以下の目的で利用されます：

#### 1.	保存と転送コストの削減
PBFはXML形式に比べて大幅に小さくなるため、インターネット経由での転送やストレージコストを削減できます。

#### 2.	処理速度の向上
PBFはバイナリ形式で記録されているため、ツールがデータを効率的に処理できます。特に、PostGISやosm2pgsqlなどのGISツールとの相性が良いです。

#### 3.	アプリケーションやサービスでの利用
OSMデータをバックエンドで扱うアプリケーションでは、PBF形式が利用されます。例えば、地図配信サービスや空間データの可視化システムが該当します。

### 5. PBFをどう扱うか？

PBFを受け取った場合、まず以下の手順で扱います：
#### 1.	内容を確認
PBFはバイナリ形式のため、直接中身を見ることはできません。osmium-toolなどで.osm形式に変換するとデータ構造を確認できます。

```bbash
osmium cat input.pbf -o output.osm
```
#### 2. ツールを選択して利用
PBF形式のまま処理できるツールを使用します。以下は代表例です：
- osm2pgsql：PBFデータをPostGISにインポート。
- GDAL/OGR：PBFデータを他の形式に変換。
- QGIS：PBFデータを直接読み込み。

### 6. 注意点：PBFが適さない場合もある(一般論として)

PBF形式には多くの利点がありますが、次のような場合には注意が必要です：
- データを直接確認したい場合
PBFは人間にとって不可読形式のため、データの内容を手軽に確認したい場合は.osm形式に変換する必要があります。
- 特定のアプリケーションでの対応状況

一部のツールやアプリケーションでは、PBF形式に対応していない場合があります。その際は.osm形式を使用してください。

## まとめ

OSMデータ形式の.osmと.pbfの違いを整理すると、以下のようになります：

| **特徴**            | **.osm (XML形式)**                | **.pbf (バイナリ形式)**          |
|---------------------|------------------------------------|-----------------------------------|
| **サイズ**          | 大きい                             | 小さい                            |
| **読み取り速度**    | 遅い                               | 高速                              |
| **人間が読めるか**  | 可読                               | 不可読                            |
| **利用用途**        | データ内容の確認や編集             | 保存・転送・高速処理              |

PBF形式は、保存・転送効率を向上させるためのフォーマットであり、現代のOSMデータ処理では不可欠な存在です。ただし、用途によっては.osm形式に変換して利用する場合もあります。
>例えば筆者が現在直面しているのが、OSMデータを特定のデータ形式に変換する上で相互互換性がないため、PBFから直接変換できず、.osmに一度展開して、データ処理を加えた上で、変換する、といったような作業です。

PBF形式は、保存・転送効率を最大化するだけでなく、GDALやosmium-toolといったオープンツールを活用することで、多様なフォーマットに柔軟に変換できる点においても利点があります。
これにより、データ提供者視点では幅広いユーザー層に対応でき、受信者は用途に応じた形式を選択可能となります。データ交換形式がPBFであることで、誰もがオープンツールで自由にデータを活用できるともいえると思います。

適切な形式を選択することで、OSMデータをより効率的に活用することができるかと思います。

以上、PBFとOSMの関係についての解説でした。

データの取り扱いについてさらに詳しく知りたい場合や具体的な利用例については、他の記事もぜひご参照ください。この記事がお役に立てれば幸いです。

[PBFフォーマットの概要と他のデータ形式との比較](https://qiita.com/AshMap/items/455d2a19e09db9e46ec5)
[QGISでPostGISでのPBFデータの読み込み方法](https://qiita.com/AshMap/items/b6f7177ea75584619f0f)
[OSMデータをPostgreSQLに取り込む：hstore拡張の有無による違い](https://qiita.com/AshMap/items/602e90d429905a5689d6)
[PBFデータをGeoJSONとMBTilesに変換する方法](https://qiita.com/AshMap/items/8fa6d7ed71adcab0ef5b)