PostgreSQLでGISデータの共有環境を作る

#GISデータの共有環境
　パソコンを複数使用していると、データをパソコン間で共有したくなってきます。
　一つのデータが複数のファイルに分かれるシェープファイルは、データサイズも大きく、家庭内LANでならサーバーに集約したくなるデータです。
　qgisを使っているなら、RDBMSのPostgreSQLとPostGISを利用することでシェープファイルのデータを共有できる環境を整えられる。
　久しぶりに入れ直したので手順のメモ。
##PostGISとは
　RDBMSであるPostgreSQLに、空間データを扱える機能を追加するプログラム。
　PostgreSQLを使えればインストールできる。
　ネットで検索すると、いろいろ解説するページが見つかります（例えばSRA社の[解説ページ](https://www.sraoss.co.jp/technology/postgresql/3rdparty/PostGIS.php)）。
 「これを入れればGISデータの管理がわかりやすくなるし、処理速度も速くなる」と考えておけば、ほぼ間違いないと思います。
#PostGISの入手とインストール
　PostGISの入手方法はOS毎に違います。
##Windows
　とりあえずデスクトップパソコンにインストールしてみます。
　複数のコンピュータから本格的にWindowsパソコンにアクセスする場合、Windowsのライセンスに適合するような方法を考える必要があります（確かクライアント用Windowsをサーバー用途で利用するのは不可のはず）。
　個人が家庭内での利用や予算が無い組織では、FreeBSDやLinuxでサーバーを一台準備するのが安全で便利かもしれません。
###PostgreSQLのインストール
　[日本PostgreSQLユーザ会](https://www.postgresql.jp/)を見に行くとダウンロードのページがあり、ここからWindowsのダウンロードページへのリンクを辿ると、EnterpriseDBという会社のこちらの[ページ](https://www.enterprisedb.com/downloads/postgres-postgresql-downloads)にたどり着きます。
　ここでダウンロードできるファイルはインストーラーになっており、メニューに沿って作業すると、PostgreSQL本体をインストールし、その後各種オプションを選ぶ中でPostGISをインストールできます。
　インストーラーの動作確認は、下記のようになっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/347462/27328892-e68d-e153-3ada-edf70fd1c7aa.png)
　ダウンロードしたインストーラーを管理者権限で実行すると、次のようなダイアログが表示されます。
　![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/347462/edf8bdc0-88ff-2855-98b5-00d7ff549d64.png)
　後は画面の指示に沿ってインストールします。設定する内容は、こちらの[解説記事](https://lets.postgresql.jp/documents/tutorial/windows/1)を参考にしました。
　オプションを選ぶダイアログで「Stack Bulider」は選んでおきます。
　このプログラムでPostGISをインストールします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/347462/ed5578ac-ee9d-94eb-7e63-0e93af898bf6.png)
　PostgreSQLのインストールが終わると、次のようなダイアログが開くので、チェックをそのままにしてFinishを押すと、Stack Buliderを起動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/347462/3bd09984-9815-f065-5503-575a80502689.png)
###PostGISのインストール
　PostgreSQLのインストールが終わったら、スタックビルダを使用してPostGISのインストールを行います。
　今まで何回かインストールしてみて、リモートサーバよりもインストールしたローカルを見に行ったほうがトラブルが無かった印象があるので、ローカルを見に行くように設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/347462/b4716029-ee57-24ff-bfb0-165e7406ee68.png)
　インストールするプログラムを選択するダイアログが開くので「Spatial Extensions」を開き、PostGISにチェックします（次の図ではODBCドライバにもチェックを入れていますが、AccessなどからPostgreSQLを利用しない場合これは不要です）。
　![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/347462/d48e0200-103f-f0a9-ca6c-058b132f6a67.png)
　ダウンロードの後、インストールをするか確認されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/347462/2e7e68cc-b7c2-4606-e62a-b2967229ecf6.png)
　スキップしないで次に進むとインストールされます。
　まず、ライセンスに同意します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/347462/f9c24b55-b89b-231a-3060-eeb3d9065b00.png)
　次にインストールと同時にSpatial Database（地理情報用データベース）を作るのか確認されるので、チェックして実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/347462/71a2b59b-4191-2155-69a3-a3971f646c3c.png)
　データベースを作成するため、データベース管理者の認証が行われます。デフォルトではユーザーpostgresがデータベース管理者で作成されているはずです。デフォルトでインストールした場合、PostgeSQLインストール時にpostgres用に決めたパスワードを入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/347462/592962df-8837-0d8b-dbb5-911e521e0f12.png)
　次に地理情報用データベースの名称を決定します。ここで作成するデータベースはテンプレートとして使用しますので、PostGISのバージョンなどがわかるようデフォルトのままが良いと思います。
　インストールの過程で環境変数GDAL_DATAを設定するか訊かれます。これは以前は無かったステップですね。
　ラスターデータを正しく取り扱うために必要とダイアログにあるので、「はい」にして進みます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/347462/5a32ccdc-79af-2790-3156-e61e72432394.png)
　つづいてラスターデータ用のドライバを有効にするの質問なので、これも「はい」で進めます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/347462/9627768a-e375-df1d-ad6c-fb6052d5e9d4.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/347462/26fa1a9f-8224-9dcf-dd48-da5690aed8c4.png)
　もしかして、地図タイルも格納できるようになったのかしら。
　これでインストールが終わったのでスタックビルダを終了します。
　後で他のブログラムが必要なときなどスタックビルダを利用してインストールできます。
##【参考】FreeBSDやDebian
　FreeBSDではPostgreSQL、PostGISともにパッケージが準備されているので、インストール自体は簡単に終わります。パッケージの名称は/usr/ports/databasesのリストを取ると調べられます。
　Debianも同じようにパッケージが準備されています。
　クライアント用Windowsをデータベース・サーバとして利用するのはライセンス的に危険なので、サーバーにはUnixクローンを使用した方が良いかもしれません。
##【参考】ソースコードから入れる
　何らかの事情でPostgreSQLをソースコードからインストールする場合、次の[ページ](http://www.finds.jp/docs/pgisman/2.5.0/postgis-ja.html#PGInstall)が参考にします。
　以前はPostgreSQLのソースコードに添付され、contribの中に含まれていたのですが、独立したようですね。
#シェープファイルを読み込んでみる
　まずGIS用のデータベースを作成します。インストールしたPostgreSQLにはPgAdmin4というWebベースのPostgreSQLの管理ツールが含まれているので、これを利用します。
　起動するとパソコンにインストールしたPostgreSQLがリストアップされます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/347462/d012e8da-7205-b7d6-b5f4-826e673f487c.png)
　今回は11を使用するので、こちらに接続します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/347462/f72d7489-03f0-5566-4e01-c60fd7022781.png)
　データベースを作成しますが、このときpostgisのデータベースをテンプレートとします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/347462/1b27b6f9-0986-9c6c-b4c9-f552d838aa45.png)
　とりあえず作ったデータベースがこれ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/347462/79c4539b-83b7-7a9c-429f-eb6b0e3f8232.png)
　次にpostgis付属のシェープファイルをロードするツールであるPostGIS Shapefile import/Export Managerというプログラムを起動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/347462/5545ceb2-ecd1-19ef-3693-fc45c6d66bc2.png)
　まずView Connection Detailsを押してPostgreSQLに接続します。次のダイアログが開くので、ユーザー名などを適切なものにして入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/347462/0c134ad6-43bb-a4f0-ca17-40abf64a8a6f.png)
　log windowにsuceedと表示されれば接続ができています。
　次にAdd Fileを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/347462/cbff66dc-bc7e-5513-74f6-e969c62a6635.png)
　日本語のファイル名の場合、うまくいかないので事前に半角英数字に変えておきます。
　読み込もうとしているシェープファイルは基盤地図情報のため、日本語Windowsを前提に作成されています。このままデータベースにロードすると、エンコーディングの違いで正しく表示されないため、エンコーディングを指定します（CP932）。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/347462/db8af18c-377f-223a-9357-801a391ee0f4.png)
　importを押すとロードされます。
#qgisからPostGISへの接続
　ロードしたデータを見てみます。
　まずPostGISへの接続を作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/347462/80b4be35-d60f-37bc-61a3-46aca12922b4.png)
　マウスを右クリックすると、新しい接続のダイアログが表示されるので、適切な情報を入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/347462/a663b344-7b58-d8d7-54eb-0394e32616d3.png)
　接続テストを押すと、データベースへのログイン情報の入力が求められます。テストが成功したら作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/347462/b8a7f76d-c14c-8426-5c92-4eac7676dce4.png)
　できた接続、この場合akitacityをレイヤにドラッグすると表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/347462/c863283d-0187-4ada-ca55-2873eeb19610.png)
　データベースにロードされたレイヤは一つなのに、同じレイヤが二つ表示されるのはなんでだろう。SRIDが違うみたいだけど。以前はこういうことは無かったけど。
　とりあえず、今日のところは新たな謎を残したまま終わることとした。