PostGISの利用
最初に述べたように、今回PostGISはLinuxサーバ上で動かし、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データベースをアクセスした。