#本記事について
PostGISは、オープンソースDBMSであるPostgeSQLの拡張モジュールで、地理空間情報を管理することができます。
この記事では、地理空間情報のデファクトスタンダードであるESRI社のシェープファイルをPostGISで取り込む方法を紹介します。
これから地理空間情報を複数人に共有・一元管理したい人にお薦めの記事です!
#PostGISのインストール
先ずはPostgreSQLをインストールしましょう。
こちらから、PostgreSQLのバージョンとインストールするOSのバージョンを指定して、インストールexeをダウンロードして下さい。
少し古い記事ですが、WindowsでPostgreSQLを使ってみようの「インストール・ウィザードでの手順」の通り進めれば問題ないかと思います。
※本記事ではPostgreSQL 10.3でOSはWindows7前提です。
PostgreSQLをダウンロードできたら、スタックビルダ(Application Stack Builder)を起動してPostGISインストール作業を進めます。
こちらも少し古い記事ですが、PostGISのインストールの記事の手順通りで問題ないかと思います。
※本記事ではPostGIS 2.4前提です。
もし、インストールがうまくいかない場合はお気軽にコメント下さい!
#データベースの作成
地理空間情報を格納するデータベースを作成します。
ここでは、「geodb」なんてデータベース名にしましょうか!
コマンドプロンプトで以下のコマンドを実行します。
psql -U (ユーザ名) -c "create database geodb"
※コマンド解説※
psql:postgreSQLを操作するコマンド
-U:ログインするユーザ名 ※私はスーパーユーザでログインしています。
-c:単一のSQLコマンドを一つ実行
データベース作成後に、接続します。
psql -U (ユーザ名) -d geodb
※コマンド解説※
-d:接続するデータベース
接続できたら、作成したデータベース(geodb)にPostGISの拡張機能を付与します。
エクステンションの追加とも言います!
geodb=# create extension postgis;
正しく追加できたら、以下のコマンドで必要なテーブルとビューが作成されているか確認しましょう。
geodb=# \d
これでデータベース作成完了です。
#シェープファイルの取り込み
本記事ではesri ジャパンの全国市町村界データを取り込んでみます。
取り込みにはPostGISのshp2pgsqlコマンドを使います。
shp2pgsqlコマンドの詳細はこちらを参照して下さい。
コマンドプロンプトで以下のコマンドを実行すると、データベースに取り込む用のSQLファイルを作成します。
shp2pgsql -W cp932 -D -I -s 4612 (シェープファイルのパス) (テーブル名) > (作成SQLファイルのパス)
※コマンド解説※
shp2pgsql:シェープファイルからPostGISで実行可能なクエリを作成するコマンド
-W:文字コードの指定
-D:ダンプ形式での実行 ※指定なしだとINSERT形式
-I:空間インデックスの作成
-s:座標系の指定 ※指定はEPSGコード
※例
shp2pgsql -W cp932 -D -I -s 4612 C:\Work\Postgres\Geodb\Data\japan_ver81.shp japancity > C:\Work\Postgres\Geodb\Query\japancity.sql
作成できたら、SQLファイルをテキストエディタで開いてみましょう!
テーブルを作成するCREATE文と、属性を取り込むCOPY文が確認できると思います。
それでは、作成したSQL文をgeodbに流します!
コマンドプロンプトで以下のコマンドを実行します。
psql -U (ユーザ名) -d geodb -f (SQLファイルのパス)
※コマンド解説※
-f:ファイルからコマンドを読み込み、実行
成功したらデータベースに接続して、SQL文でデータを確認してみましょう!
※例
geodb=# select count(*) from japancity;
geodb=# select SIKUCHOSON,P_NUM,H_NUM from japancity where KEN = '奈良県';
geodb=# select SIKUCHOSON,P_NUM,H_NUM from japancity where P_NUM >= 500000 order by P_NUM DESC;
PostGISならではの関数を使ってみるのも非常に楽しいですが、まずは一般的なSQL文で取り込んだデータを確認してみました!
#GISアプリケーションとの連携
シェープファイルと同様にGISアプリケーションを使えば、PostGISに取り込んだデータを視覚的に確認することができます。
フリーデスクトップGISであるQGISを使って紹介します。
QGISのブラウザ(下図だと右中央)の「PostGIS」を右クリックして「New Connection」をクリックします。
「新しいPostGIS接続を作成する」にて接続情報を入力してOKをクリックして接続します。
接続に成功すると、先ほど取り込みした「japancity」がブラウザに表示されます。
「japancity」をレイヤー画面やマップ画面にドラッグ&ドロップすると、データが表示されます。
このように、データ自体はPostGISで管理しつつも、閲覧はGISアプリケーションで行うことができます。
ちなみにQGISのプロセシングツールにPostGISにデータを取り込むツールも含まれるので、前項のコマンド以外での取り込みは可能です。
もっと言えば、PostGISインストール時に「PostGIS 2.0 Shapefile and DBF Loader Exporter」もインストールされているのと思いますので、こちらを使ってもGUIでPostGISにインストールができます。
#おわりに
PostGISいかがでしたでしょうか!?
EXCELやCSVのデータをDBMSで管理するのと同様、シェープファイルもDBMSで管理することで、一気に利活用の幅が広がりますね!
今回は入門的な内容でしたが、PostGISの機能の紹介も今後していければと思います。