PostGISの利用

最初に述べたように、今回PostGISLinuxサーバ上で動かし、GUIベースのGISのアプリケーション等はネットワークを介してWindows PCで利用することを想定している。そこでPostgreSQLをネットワークから利用できるように設定する。

先ずはPostGISを利用するユーザアカウントを作る。ここでは“adsaria”というユーザとデフォルトのデータベースを作成し、このユーザはpostgisロールに属するように設定する。

postgres@postgis:~$ psql
psql (8.4.2)
Type "help" for help.

postgres=# CREATE USER adsaria CREATEDB LOGIN PASSWORD 'password' ;
CREATE ROLE
postgres=# GRANT postgis TO adsaria ;
GRANT ROLE
postgres=# CREATE DATABASE adsaria OWNER adsaria ;
CREATE DATABASE
postgres=# \q
postgres@postgis:~$

(ロールpostgisへの付加はGRANTを使わずに、CREATE USER時に IN ROLE句を使って設定もできる。)

次に、ネットワークからPostgreSQLサーバへアクセスできる様にファイル /etc/postgresql/8.4/main/pg_hba.conf(パス名はPostgreSQLのバージョン等によって異なる)に次の行を追加する。

#
host    all         adsaria     0.0.0.0/0             md5

これで“adsaria”というユーザはパスワード認証を使ってどのネットワークからもアクセスできる。
更に /etc/postgresql/8.4/main/postgresql.conf の“listen_addresses”行のコメントを外して、アクセス可能なホストを指定する。(ここでは任意のホストからアクアセを許すように設定している。)

listen_addresses = '*'			# what IP address(es) to listen on;

PostgreSQLサーバを再起動する。

postgres@postgis:~$ sudo service postgresql-8.4 restart

これでネットワーク経由のアクセスが可能になったので、“-h”オプションと共に psql コマンドでアクセスできることを確認する。(その際、アドレスとして127.0.0.1(またはlocahost)は使わない。)

postgres@postgis:~$ psql -U adsaria -h 192.168.1.129
Password for user adsaria:
psql (8.4.2)
SSL connection (cipher: DHE-RSA-AES256-SHA, bits: 256)
Type "help" for help.

adsaria=> \q
postgres@postgis:~$

ユーザの準備とネットワークからアクセスが整ったのでPostGISデータベースを作成する。

postgres@postgis:~$ psql -U adsaria -h 192.168.1.129
Password for user adsaria:
psql (8.4.2)
SSL connection (cipher: DHE-RSA-AES256-SHA, bits: 256)
Type "help" for help.

adsaria=> CREATE DATABASE gistestdb TEMPLATE template_postgis ;
CREATE DATABASE
adsaria=> \c gistestdb
psql (8.4.2)
SSL connection (cipher: DHE-RSA-AES256-SHA, bits: 256)
You are now connected to database "gistestdb".
gistestdb=> \d
              List of relations
 Schema |       Name       | Type  |  Owner
--------+------------------+-------+---------
 public | geometry_columns | table | postgis
 public | spatial_ref_sys  | table | postgis
(2 rows)

gistestdb=> \q
postgres@postgis:~$

次に、今作ったgistestdbデータベースにGISデータを読み込む。

GISデータを入手しなければならないが、ESRI社が無償で配布している“全国市区町村界データ”等で試すことができる。(非営利目的で非再配布であれは利用できるようだ。)“japan_ver62.zip”が最新バージョン(とっていも2007年10月更新だが)になっている。

先ずはファイルをダウンロードしてunzipする。(unzipコマンドが無い場合は“apt-get install zip”でパッケージを追加する。)

postgres@postgis:~$ mkdir Shapes
postgres@postgis:~$ cd Shapes/
postgres@postgis:~/Shapes$ wget http://www.esrij.com/products/gis_data/japanshp/files/japan_ver62.zip
	:
postgres@postgis:~/Shapes$ ls
japan_ver62.zip
postgres@postgis:~/Shapes$ unzip japan_ver62.zip
	:
postgres@postgis:~/Shapes$ ls
japan_ver62  japan_ver62.zip
postgres@postgis:~/Shapes$ cd japan_ver62
postgres@postgis:~/Shapes/japan_ver62$ ls
japan_ver62.dbf  japan_ver62.sbn  japan_ver62.shp      japan_ver62.shx
japan_ver62.prj  japan_ver62.sbx  japan_ver62.shp.xml  Readme.txt
postgres@postgis:~/Shapes/japan_ver62$

次にPostGISのコマンド shp2pgsqlを使ってshpフォーマットをSQL文に変換し、それをpsqlコマンドでデータベースに読み込む。

postgres@postgis:~/Shapes/japan_ver62$ shp2pgsql -W SJIS japan_ver62.shp japan_ver62 gistestdb > japan_ver62.sql
Shapefile type: Polygon
Postgis type: MULTIPOLYGON[2]
postgres@postgis:~/Shapes/japan_ver62$ ls
japan_ver62.dbf  japan_ver62.sbn  japan_ver62.shp      japan_ver62.shx  Readme.txt
japan_ver62.prj  japan_ver62.sbx  japan_ver62.shp.xml  japan_ver62.sql
postgres@postgis:~/Shapes/japan_ver62$ psql -U adsaria -d gistestdb -h 192.168.1.129 < japan_ver62.sql
Password for user adsaria:
	:
	:
COMMIT
postgres@postgis:~/Shapes/japan_ver62$

これで形状ファイルが読み込めた。後はお好みのGISアプリケーションからネットワーク越しにアクセスすればいい。
次の例はネットワーク上のWindows PCにある“uDig”というGISアプリケーションからPostGISデータベースをアクセスした。