QGISでPostGISでのPBFデータの読み込み方法

## 目次

1. [はじめに](#はじめに)
2. [必要なツール](#必要なツール)
3. [手順](#手順)
   - 3.1 [PostgreSQLとPostGISのインストール](#31-postgresqlとpostgisのインストール)
   - 3.2 [データベースの作成](#32-データベースの作成)
   - 3.3 [osm2pgsqlのインストール](#33-osm2pgsqlのインストール)
   - 3.4 [PBFデータのインポート](#34-pbfデータのインポート)
   - 3.5 [データの確認](#35-データの確認)
   - 3.6 [QGISでデータを可視化](#36-qgisでデータを可視化)
4. [サンプル表示](#サンプル表示)
5. [おわりに](#おわりに)

## はじめに

地理空間データを管理するためのPostGISとQGISは非常に強力なツールです。本記事では、OpenStreetMapのPBF形式データをPostGISにインポートし、QGISで地図データとして可視化する方法を説明します。同様のユースケースにおいて少しでもお役に立てれば嬉しいです。

**PBF** **(Protocolbuffer Binary Format)** は、OpenStreetMapの地理データを格納する効率的なバイナリ形式です。従来のXML形式（`.osm`ファイル）に比べ、コンパクトで高速に処理できるのが特徴です。PBFファイルの詳細については、別の記事の機会としたいと思います。

この記事では、**Mac環境**を前提に説明しますが、Windows環境でも実行可能です。Windowsでは、インストール方法やファイルパスの記述が一部異なるため、必要に応じて該当箇所に補足を入れています。

また、大規模なデータをそのままQGISで使用すると、パフォーマンスの問題が発生する場合があります。インポートしたデータを効率的に処理し、QGISプロジェクト上で快適に活用する方法は続編で解説したいと思います。

## 必要なツール

以下のツールを事前に準備してください：

- **PostgreSQL**（バージョン14以上推奨）
- **PostGIS**（PostgreSQLの空間拡張機能）
- **osm2pgsql**（PBFデータをPostGISにインポートするツール）
- **QGIS**（地理情報システムソフトウェア）

### Windows環境についての補足
- PostgreSQLは、公式インストーラーを使用してインストールします。
- osm2pgsqlは、公式ページからバイナリをダウンロードして設定します。


## 手順

### 3.1 PostgreSQLとPostGISのインストール

#### macOSの場合

Homebrewを使用してインストールします：

```bash
brew install postgresql postgis
```

その後、PostgreSQLサーバーを起動します：
```bash
brew services start postgresql
```

サーバーの状態を確認するには以下を実行します：
```bash
brew services list
```

#### Windowsの場合
1. PostgreSQLの公式サイトからインストーラーをダウンロードします：
[PostgreSQL公式サイト](https://www.postgresql.org/download/windows/)
2. インストール時に「Additional Components」で**PostGIS**を選択してください。
3. デフォルトインストール先は `C:\Program Files\PostgreSQL\<バージョン>` です。
4. サーバーを起動するには、`pgAdmin`を使用するか、以下のコマンドを実行します：

> `<バージョン>` にはインストールされているPostgreSQLのバージョン（例: `15`）を置き換えてください。

```cmd
net start postgresql-x64-<バージョン>
```

### 3.2 データベースの作成

#### macOSの場合

以下をターミナルで実行して接続します：
```bash
psql -U postgres
```

>`psql -U postgres` は、デフォルトで作成されるスーパーユーザー「postgres」で接続するためのコマンドです。しかし、PostgreSQLのインストール環境によっては、現在のOSログインユーザー名（例: `$(whoami)` の結果）が自動的にPostgreSQLのユーザーとして登録されることがあります。そのため、`psql -U $(whoami)` でも接続可能な場合があります。接続できるユーザー一覧を確認するには、`psql` に接続後に `\du` コマンドを実行してください。


その後、以下のコマンド(sql)で新しいデータベースを作成します：
```sql
CREATE DATABASE gis_database;
```

作成したデータベースでPostGIS拡張を有効化します：
```sql
\c gis_database
CREATE EXTENSION postgis;
```

最後に、プロンプトを終了します：
```sql
\q
```

#### Windowsの場合

`psql`が環境変数に登録されていない場合、以下のようにPostgreSQLのインストールディレクトリにある実行ファイルを直接指定して接続します：

```cmd
"C:\Program Files\PostgreSQL\<バージョン>\bin\psql" -U postgres
```

> `<バージョン>` には、インストールされているPostgreSQLのバージョン番号（例: `15`）を記載してください。通常はインストールディレクトリに記載されています。

以降の操作はmacOSと同様です。

### 3.3 osm2pgsqlのインストール

#### macOSの場合

Homebrewを使用してインストールします：
```bash
brew install osm2pgsql
```

#### Windowsの場合

osm2pgsql公式サイトからバイナリをダウンロードしてください。
	1.	ダウンロードしたZIPファイルを展開します。
	2.	フォルダのパスをシステムの環境変数「Path」に追加します。
	3.	確認のため、以下を実行します：
```cmd
osm2pgsql --help
```

### 3.4 PBFデータのインポート

今回はサンプルとしてGeofabrik社のダウンロードページから、対象地域のPBFデータを取得します。ここでは、例としてオーストラリアのデータを使用します。ご自身で利用されるPBFデータの仕様にもよりますが、基本的には本稿の手順で読み込みが可能かと思います。

以下のコマンドでPBFファイルをPostGISにインポートします。

#### macOSの場合
```bash
osm2pgsql -d gis_database -U postgres ~/Downloads/australia-latest.osm.pbf
```

#### Windowsの場合
```cmd
osm2pgsql -d gis_database -U postgres "C:\Users\Username\Downloads\australia-latest.osm.pbf"
```

インポートが成功すると、次のテーブルがデータベースに作成されます：
	•	planet_osm_point
	•	planet_osm_line
	•	planet_osm_polygon

### 3.5 データの確認

インポート後、データベースに接続してテーブルを確認します：
```bash
psql -U postgres -d gis_database
```

以下のコマンドでテーブル一覧を表示します：
```bash
\dt
```

例えば、planet_osm_pointテーブルの内容を確認するには以下を実行(sql)します：
```sql
SELECT * FROM planet_osm_point LIMIT 10;
```

### 3.6 QGISでデータを可視化

1. QGISを起動します。
2. 「レイヤー」 → 「PostGISレイヤーを追加」を選択します。
3. 新しい接続を作成し、以下の情報を設定します：
   - **ホスト**：`localhost`
   - **ポート**：`5432`
   - **データベース**：`gis_database`
4. 接続後、`planet_osm_point`、`planet_osm_line`、`planet_osm_polygon`の各テーブルを追加します。

>PostgreSQLの認証設定（pg_hba.conf）がローカル接続を自動認証するように設定されている場合パスワードやユーザー名が求められず接続できます。接続できない場合は、データベース設定を確認し、該当のパスワードやユーザー名を設定ください。

## サンプル表示
以下は、Geofabrik社から取得したオーストラリアのPBFデータをQGISで表示した例です。この画像では、道路や建物、地物などの情報がPostGISデータベースから読み込まれ、QGIS上で表示されています。
![AU.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3789281/71aa5bd0-cc72-0760-753a-ac3596c8be40.jpeg)

## おわりに

これで、PBFデータをPostGISデータベースにインポートし、QGISで地図として表示するまでの手順を紹介しました。

この手順を参考に、ぜひ地理空間データの活用を進めてみてください！