Docker DesktopでPostGISを構築、QGISで接続〜可視化まで

## はじめに
普段は人流データを取り扱う企業にて、空間分析等を行うエンジニアとして在籍しています。
普段使うツールの中には皆様ご存じの**PostGIS**があり、勤務以外でも軽くいじりたい(~~PostGISで遊びたい~~)と考えていましたが、私自身の~~スキルと~~予算の限界があるのでローカル上で構築することを前提に調べまとめました。

すでにQiita上にはDockerでPostGISを構築する記事がいくつかありますが、この記事ではデータ投入、QGISから接続・可視化まで記載しています。

## 参考資料
今回はこちらの記事を参考にさせていただきました。

https://qiita.com/A-Kira/items/3339e902e7a8fca8fdf6

## 使用環境
```
OS: Mac OS 12.6 Monterey
model: MacBook Pro (13-inch, 2020, Four Thunderbolt 3 ports)
Docker: Docker Desktop Version 4.15.0
PostgreSQL: 11.2.1
PostGIS: 2.5.2
QGIS: 3.22.11
```
## 手順
### 1.Dockerの導入
[Dockerの公式サイト](https://www.docker.com/)から**Docker Desktop**をインストール。
### 2.PostGISの構築
Docker Desktopのインストール後、ターミナルで　docker pull mdillon/postgis を実行。
![スクリーンショット 2022-12-21 9.46.21.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/442333/55708dd2-0341-139b-bdb3-3bfb889fc796.jpeg)
実行完了のメッセージが出力されたら、Docker Desktopを開き**images**で**mdillon/postgis**がpullされていることを確認し、**ACTIONS**にある実行ボタン（▶︎）をクリックし、コンテナを実行。
![スクリーンショット 2022-12-21 9.41.13.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/442333/cf7b162c-2006-e3ff-19bb-03b6fcc4b16f.jpeg)

Docker Desktopでは初めてコンテナを実行させる際に下の画像のように初期設定のポップアップが表示されるので、今回は下記のように設定。
![スクリーンショット 2022-12-21 10.33.52.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/442333/2bcee5b4-88e3-2d54-caf0-e53e475dc4c8.jpeg)
```
Ports: <任意のポート番号>
Enviorenment variables
 → PostgreSQLとしての環境設定

Variable: Value
POSTGRES_DB: test_postgis
POSTGRES_USER: user
POSTGRES_PASSWORD: password
```
入力完了したら下の**Run**を押して実行。

### 3.QGISからDocker上のPostGISへ接続
![スクリーンショット 2022-12-21 10.47.41.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/442333/1505323b-02f6-d180-4a9a-e14b553d75a6.jpeg)
2.でPostGISコンテナを実行後にDocker Desktopの **Logs** に上画像のメッセージが出力されたら、QGISを起動させ、データソースマネージャーを開く。メニュー内の **PostGIS** を右クリックして **新規接続** を選択。
![スクリーンショット 2022-12-21 10.55.03.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/442333/fa919844-a9b3-ec0a-510f-59e3e87a3bc1.jpeg)


新規接続設定のポップアップ内にて2.で設定した値を入力し、**テスト接続** を実行。接続できればポップアップ上部に「 **<データベース名>への接続に成功しました** 」と表示されるので、確認後ポップアップ最下部にある **OK** をクリックし接続設定を保存。
![スクリーンショット 2022-12-21 10.59.05.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/442333/a31178ae-b43c-634d-5152-3d6aa2731027.jpeg)

保存後、データソースマネージャーの **PostGIS** に設定したデータベースが表示されるので以降はこちらを使用する。
![スクリーンショット 2022-12-21 11.03.37.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/442333/49b7d1d5-8c91-b085-2c91-e34e6bc82f89.jpeg)

### 4. QGISからPostGISへデータをエクスポート
今回はQGISのプロセッシングツールボックスの **レイヤ領域にランダム点群** で生成したポイントデータを使います。
![スクリーンショット 2022-12-21 11.19.28.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/442333/3259867d-6b51-35db-44aa-ab8b4289e539.jpeg)

プロセッシングツールボックスで　**PostGISへエクスポート** を選択し、ポップアップ内で設定してから実行。

![スクリーンショット 2022-12-21 11.23.12.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/442333/2bf699cf-2e6f-e076-ecee-af0229c3be4f.jpeg)
ログウィンドウで **Success ......** と出たら処理は正常に完了。

### 5.PostGISに保存しているデータをQGISで可視化
QGISのデータソースマネージャーにある **PostGIS**を選択すると下画像のようにメニューが表示されるので、4.でエクスポートした **test_point** をダブルクリック。これで画面にポイントデータが表示される。

![スクリーンショット 2022-12-21 11.26.30.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/442333/fca5dac4-f943-8e03-3c2a-aaef991d5dde.jpeg)
![スクリーンショット 2022-12-21 11.29.08.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/442333/4934fe45-43ec-6ac3-c36d-72c1cbf42bc3.jpeg)



## 終わりに
Dockerで構築する場合はdocker-compose.yamlを編集するのがセオリーですが、Docker Desktopでの環境構築の際には実行する時の初期設定で指定するというところ点に気をつけないといけないと思います。これで初心者でもある程度一通りの環境構築ができそうです。
次のタイミングでは、PostGISの機能をいくつか試してみます。