LoginSignup
26
31

More than 5 years have passed since last update.

PostGISで地理空間情報を管理してみた!

Last updated at Posted at 2018-04-14

本記事について

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

※作成されたテーブル・ビュー
image.png

これでデータベース作成完了です。

シェープファイルの取り込み

本記事では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;

image.png

geodb=# select SIKUCHOSON,P_NUM,H_NUM from japancity where KEN = '奈良県';

image.png

geodb=# select SIKUCHOSON,P_NUM,H_NUM from japancity where P_NUM >= 500000 order by P_NUM DESC;

image.png

PostGISならではの関数を使ってみるのも非常に楽しいですが、まずは一般的なSQL文で取り込んだデータを確認してみました!

GISアプリケーションとの連携

シェープファイルと同様にGISアプリケーションを使えば、PostGISに取り込んだデータを視覚的に確認することができます。
フリーデスクトップGISであるQGISを使って紹介します。

QGISのブラウザ(下図だと右中央)の「PostGIS」を右クリックして「New Connection」をクリックします。
image.png

「新しいPostGIS接続を作成する」にて接続情報を入力してOKをクリックして接続します。
image.png

接続に成功すると、先ほど取り込みした「japancity」がブラウザに表示されます。
image.png

「japancity」をレイヤー画面やマップ画面にドラッグ&ドロップすると、データが表示されます。
image.png

このように、データ自体はPostGISで管理しつつも、閲覧はGISアプリケーションで行うことができます。

ちなみにQGISのプロセシングツールにPostGISにデータを取り込むツールも含まれるので、前項のコマンド以外での取り込みは可能です。

image.png

もっと言えば、PostGISインストール時に「PostGIS 2.0 Shapefile and DBF Loader Exporter」もインストールされているのと思いますので、こちらを使ってもGUIでPostGISにインストールができます。

image.png

おわりに

PostGISいかがでしたでしょうか!?
EXCELやCSVのデータをDBMSで管理するのと同様、シェープファイルもDBMSで管理することで、一気に利活用の幅が広がりますね!
今回は入門的な内容でしたが、PostGISの機能の紹介も今後していければと思います。

26
31
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
26
31