PostGISのインストール

PostGISをインストールしてみたので手順をメモしておく。
PostGISの本体はLinuxでサーバとして動かし、Windows PCをクライアントとしてGUIベースの各種GISアプリケーションはWindows PCで利用することを想定してシステムを構築した。

今回、サーバとして利用するPCのLinuxには私のお気に入りのUbuntuを利用したが、基本的には他のLinuxでもほぼ同様の手順で大丈夫かと思う。(Debian系とRedhat系などの違いで一部のコマンドは違うが。)私がUbuntuを気に入っているのは、LTS(長期サポート版)があり長い期間安定して使えることと、Linux上のアプリケーションが整理されて豊富に利用できるからだ。(GUIの良さもあるが、今回はサーバ版を利用するのでGUIは関係ない。)

さて、もう3ヵ月程で最新のLTS版がリリースされるようだが、今回は(LTSではないが)現時点での最新版のUbuntu 9.10 Serverを使った。後述するが、Linuxのバージョンにより利用できるPostreSQLとPostGISのバージョンも微妙に異なってくるので、ベースとなるLinuxに合わせてPostgreSQLPostGISのバージョンを選定する必要がある。

PostGISは、これ自身はアプリケーションというよりは、PostgreSQL拡張機能アドインというイメージに近い。PostgreSQLは有名なオープンソースのリレーショナルデータベースだが、PostGISPostgreSQLに対してGISに向いたデータ定義や関数を提供している。Linuxとしてのコマンドも2つ程含まれるが、多くはPostgreSQLの組み込み関数(およびそれから呼び出される外部ライブラリ)から構成されている。従って、PostGISの本体はPostgreSQLそのものであり、先ずはPostgreSQLをインストールしなければならない。

PostgreSQLPostGISも、Linuxディストリビューションのパッケージとして既にコンパイルされた状態のものをインストールする方法と、オープンソースソースコードをダウンロードして、それをコンパイルして使う方法がある。一長一短であり、前者はインストールが簡単で確実に動作することができるが最新のバージョンが使えない場合がある。後者は最新のバージョンを利用できる半面、コンパイルなどの作業が必要であり、場合によってはハマってしまうことがある。Windows側のGUIアプリケーション(GISツール)が特定のバージョンのPostgreSQLPostGISにしか対応していない場合は、Linux側のGISサーバもそれに合わせてバージョンを選択する必要があり、場合によってはソースからコンパイルする必要性が出てくる。

PostGISを利用できるようにするまでの大まかな手順は次のようになる。

  1. PostgreSQL/PostGISのインストール(パッケージ版
  2. PostgreSQL/PostGISのインストール(オープンソース版
  3. PostGIS用データベースの作成(テンプレート・データベースの作成を含む)
  4. PostGISの利用

この内、“PostgreSQL/PostGISのインストール”は標準パッケージからのインストールと、オープンソースからのインストールに分けて紹介する。まずは、標準パッケージを利用してインストールする方法、次にオープンソースからコンパイルする方法という順序で紹介する。ただし、PostgreSQLPostGISとも先週から初めて使い始めたので、まだ不慣れであり、不的確なオペレーション(とくにデータベース関連のオペレーション)があるかも知れないことを予め断わっておく。

なお、Ubuntu 9.10 Serverの標準パッケージとしてインストールできるPostgreSQLは8.4、PostGISは1.3.5である。(現時点での最新LTSであるUbuntu 8.04 LTSでは、PostgreSQLは8.3、PostGISは1.2.1である。)オープンソースの最新版は今日の時点ではPostgreSQLは8.4.2、PostGISは1.4.1である。

以下の作業は、先ずroot権限で行うので任意のユーザでログインした後、“sudo -s”でroot権限を得た状態で作業を始める。
⇒次へ(パッケージ版)  ⇒次へ(オープンソース版)   ⇒トップへ

PostgreSQL/PostGISのインストール(パッケージ版)

PostgreSQLのインストール

まず、ベースとなるLinuxをインストールする。その際(=インストール時)に、追加パッケージを聞かれるが、ここではPostgreSQLを選択しないこと。なぜなら....

Ubuntu 9.10の標準パッケージをインストールするとPostgreSQLは8.4、PostGISは1.3.5になりそうだが、実はPostgreSQLは8.3をインストールしなければならない。標準パッケージのPostGISPostgreSQL 8.4をサポートしていないためだ。Ubuntuを起動して次のコマンドでPostGISが対応しているPostgreSQLを確認する。

root@postgis:~# apt-get update
root@postgis:~# apt-cache pkgnames | grep postgresql-\.*-postgis
postgresql-8.3-postgis

そこで、PostgreSQL 8.3をインストールしなければならない。(もし、既に別のバージョンのPostgreSQLがインストールされている場合は、別のマシンを使うか apt-get remove postgresqlで削除する必要がある。)

root@postgis:~# apt-get install postgresql-8.3

この時、PostgreSQL 8.3は最新版でないので 8.4へアップグレードするようにというメッセージが出るが、これは無視(メッセージ画面でを押す=リターンキーを押す)。

しかし、セキュリティパッチなどのアップグレードで勝手に8.4へアップグレードされても困るので、念のため8.3をインストール後、apt-get upgrade、apt-get distupgradeを実行したが、自動的に8.4へアプリケーショングレードされることはなかった。

PostGISのインストール

これは簡単。

root@postgis:~# apt-get install postgresql-8.3-postgis

このインストールで以下のパッケージも追加される。

libgeos-3.1.0
libgeos-c1
libproj0
proj-data
postgis
postgresql-8.3-postgis

これ以降の作業(PostGIS用データベースの作成等)はパッケージからインストールする場合も、ソースコードからインストールする場合も同じなので、(ソースコードからのインストールの後で)後方で挙げておく。
⇒次へ   ⇒トップへ

PostgreSQL/PostGISのインストール(オープンソース版)

ここではPostGISオープンソースからコンパイルしてインストールする方法を紹介する。ただし、ベースとなるPostgreSQLは標準パッケージ利用してインストールしている。

PostgreSQLのインストール

Ubuntu 9.10の場合、標準パッケージのPostgreSQLが8.4なので、SQLサーバはそのまま標準パッケージをインストールした。

root@postgis:~# apt-get install postgresql

厳密には最新版ではないかも知れないが、ここはそれ程神経質にならず、標準パッケージを使った方が、パッチの対応も“お任せ”できるので良いだろう。

次に、PostGISソースコードからインストールする。

PostGISの実行に必要なパッケージの追加

標準パッケージからインストールする場合は、パッケージ管理システム(Debian系だとapt、Reddhat系だとyum等)が必要となる関連パッケージも自動的にインストールするので、余計な手間がかからないが、ソースコードからインストールする場合には、先に必要なパッケージを手動でインストールする必要がある。そのため、PostGIS環境で利用するパッケージ、GEOS(Geometry Engine Open Source:幾何エンジン)とProj.4(Cartographic Projections Library:地図処理投影ライブラリ)を次の様にインストールしておく。

root@postgis:~# apt-get install libgeos-dev
root@postgis:~# apt-get install proj

PostGISのインストールに必要なパッケージの追加

PostGISのインストール(コンパイル、設定、チェック)に必要なパッケージを予めインストールしておく。

root@postgis:~# apt-get install libpq-dev
root@postgis:~# apt-get install postgresql-server-dev-8.4
root@postgis:~# apt-get install flex
root@postgis:~# apt-get install xsltproc
root@postgis:~# apt-get install libcunit1-ncurses-dev

最後のCUnitパッケージは無くてもインストールは可能。CUnitは、後述する“インストール状況の確認”の際に、CUnitが存在すればユニットテストを行う。もし、CUnitが存在しなければユニットテストは省略される。
次のパッケージはドキュメント生成で必要とされるパッケージのようで、これらをインストールしなくてもPostGISをインストールすることはできる。これらのパッケージ、特にdblatexはフォントデータをインストールするためサイズが大きい。500MB近く喰ってしまうので、例えばPostGISと座標処理だけしたいとかいう場合は必要ないかも知れない。もっとも500MB程度は高が知れているのだけど。)ドキュメントも含め全てをインストールする場合には予め追加しておく。

root@postgis:~# apt-get install graphicsmagick-imagemagick-compat
root@postgis:~# apt-get install dblatex
root@postgis:~# apt-get install ldp-docbook-xsl

PostGISのインストール

今までの作業はパッケージのインストールが中心だったのでroot(つまり sudo -sの状態)で実行した。以降の作業も rootで続けることもできるが、PostGISのソースの保管・管理などは一般ユーザで行った方が良いので、“postgres”というユーザで行うことにした。(“postgis”などのユーザを作成しても良いが、adminユーザに登録したり、データベースに管理者として登録するなど、セキュリティが低下するため“postgres”で作業することにした。この辺りを気にしないのであればpostgresとは別に“postgis”というアカウントを作成して作業した方が良いだろう。)

まず、postgresアカウントをadminグループに追加し、パスワードを設定してから、postgresにsu(switch user)する。

root@postgis:~# adduser postgres admin
Adding user `postgres' to group `admin' ...
Adding user postgres to group admin
Done.
root@postgis:~# passwd postgres
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
root@postgis:~# su - postgres
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

postgres@postgis:~$

(なお、一連の作業が終わったらpostgresをadminグループから削除し、パスワードも潰しておいた方が良いだろう。)

次にPostGISソースコードをダウンロードする。“PostGIS:Downloads”ページから適当なものをダウンロードする。私は今日時点で最新版である postgis-1.4.1.tar.gz をダウンロードした。ダウンロードしてtar展開すると以下の様にファイルが解凍される。

postgres@postgis:~$ wget http://postgis.refractions.net/download/postgis-1.4.1.tar.gz
postgres@postgis:~$ ls
8.4  postgis-1.4.1.tar.gz
postgres@postgis:~$ tar xf postgis-1.4.1.tar.gz
postgres@postgis:~$ ls
8.4  postgis-1.4.1  postgis-1.4.1.tar.gz
postgres@postgis:~$ ls postgis-1.4.1
aclocal.m4    COPYING      liblwgeom  postgis               TODO
autogen.sh    CREDITS      libtool    postgis_comments.sql  topology
ChangeLog     doc          loader     postgis_config.h.in   utils
config.guess  extras       ltmain.sh  README.postgis        Version.config
config.sub    GNUmakefile  macros     regress
configure     install-sh   Makefile   spatial_ref_sys.sql
configure.ac  java         NEWS       STYLE
postgres@postgis:~$

ここでREADME.postgisを見て先ほどインストールしたPostgreSQLのバージョンが適合するか確認しておく。以下の様な記述があるはずだ。

postgres@postgis:~$ more postgis-1.4.1/README.postgis
	:
REQUIREMENTS
------------

PostGIS is compatible with PostgreSQL 8.2 and above.
	:

問題無ければ、PostGISソースコードディレクトリに移り、最初に“./configure”を実行する。無事にコンフィグレーションが実行できれば、次のようなサマリが出て終わる。

postgres@postgis:~/postgis-1.4.1$ ./configure
	:
	:
  PostGIS is now configured for x86_64-unknown-linux-gnu

 -------------- Compiler Info -------------
  C compiler:           gcc -g -O2
  C++ compiler:         g++

 -------------- Dependencies --------------
  GEOS config:          /usr/bin/geos-config
  GEOS version:         3.1
  PostgreSQL config:    /usr/bin/pg_config
  PostgreSQL version:   8.4
  PROJ4 version:        46
  PostGIS debug level:  0

 -------- Documentation Generation --------
  xsltproc:             /usr/bin/xsltproc
  xsl style sheets:     /usr/share/xml/docbook/stylesheet/nwalsh
  dblatex:              /usr/bin/dblatex
  convert:              /usr/bin/convert

次にライブライブラリのコンパイルSQLプログラム、コメントを生成する。

postgres@postgis:~/postgis-1.4.1$ make
	:
	:
PostGIS was built successfully. Ready to install.

PostGIS was built successfully. Ready to install.”というメッセージが出てくればOK。
次に commnetsデータベースとドキュメント類を作成する。

postgres@postgis:~/postgis-1.4.1$ make comments
postgres@postgis:~/postgis-1.4.1$ make docs

作成したライブラリ類をインストールする。

postgres@postgis:~/postgis-1.4.1$ sudo make install
postgres@postgis:~/postgis-1.4.1$ sudo make comments-install
postgres@postgis:~/postgis-1.4.1$ sudo make docs-install

(makeを実行せずに行き成りmake installでも良いが、コンパイルエラーやインストールエラーが発生した場合に原因の切り分けを単純にするためにもmakeとmake installは分けて実行した方が良い。)
このコマンドで(バージョンや環境等によっても異なるが)次のファイルがインストールされる。

/usr/lib/postgresql/8.4/lib/postgis-1.4.so

/usr/share/postgresql/8.4/contrib/spatial_ref_sys.sql
/usr/share/postgresql/8.4/contrib/postgis.sql
/usr/share/postgresql/8.4/contrib/uninstall_postgis.sql
/usr/share/postgresql/8.4/contrib/postgis_upgrade_14_minor.sql
/usr/share/postgresql/8.4/contrib/postgis_upgrade_13_to_14.sql
/usr/share/postgresql/8.4/contrib/postgis_upgrade_12_to_14.sql
/usr/share/postgresql/8.4/contrib/postgis_comments.sql

/usr/lib/postgresql/8.4/bin/pgsql2shp
/usr/lib/postgresql/8.4/bin/shp2pgsql

/usr/share/doc/postgresql/postgis/postgis.html
/usr/share/doc/postgresql/postgis/README.postgis
/usr/share/postgresql/8.4/man/man1/pgsql2shp.1
/usr/share/postgresql/8.4/man/man1/shp2pgsql.1

ここで注意しなければならないのは、2つのLinuxコマンド pgsql2shpと shp2pgsqlである。標準パッケージからのインストールではこれらのコマンドは /usr/bin/に設置されるので、何の追加設定も無く利用することができる。しかし、/usr/lib/postgresql/8.4/bin/にはpathが設定されていないので、このままでは2つのコマンドを利用できない。正統派(?)の設定方法としては、PostGISを利用するユーザのpathに“/usr/lib/postgresql/8.4/bin”を追加することだろう。しかし、私は今回のケースでは /usr/bin/からシンボリックリンクを張る方法で対処した。

$ sudo ln -s /usr/lib/postgresql/8.4/bin/shp2pgsql /usr/bin/
$ sudo ln -s /usr/lib/postgresql/8.4/bin/pgsql2shp /usr/bin/

将来、パッケージ版のpostgisをインストールした際は上書きされる。

インストール状況の確認

最後に make checkにより、正常にインストール出来たかをテスト(リグレッション・テスト)する。

postgres@postgis:~/postgis-1.4.1$ make check
	:
	:
Run tests: 42
Failed: 0
make[1]: Leaving directory `/var/lib/postgresql/postgis-1.4.1/regress'

“Failed”が0であればOK。
インストール作業が無事に終わったら作業用ディレクトリをお掃除しておこう。

postgres@postgis:~/postgis-1.4.1$ make clean

⇒次へ   ⇒トップへ

PostGIS用データベースの作成

以上までの手順で(標準パッケージからインストールするか、オープンソースからインストールするかに関わらず)PostGISを利用する準備が出来た。次は、GIS情報を格納するためにPostGIS機能拡張されたデータベースを作成する。

PostGIS用データベースを作成するは、

  1. テンプレートを使って作成する方法
  2. PostGISSQLライブラリを使って作成する方法

の2通りがある。テンプレート“template_postgis”がPostgreSQLサーバに既に登録されている場合は、

postgres@postgis:~$ createdb -T template_postgis gistestdb

とコマンド1つで済む。(ここで作成するPostGIS用データベースの名前は“gistestdb”とする。以下、同様。) ただ、私のインストールしたPostGISではテンプレートデータベース template_postgisが見当たらなかった。マニュアルを見るとWin32用のインストーラーでバージョン1.1.5以上に入っているようだが、私のインストールしたLinux版にはことごとく入っていなかった。(なぜ、Windows版だけなのだろう?)ダウンロードした“postgis-1.4.1/extras/template_gis”というディレクトリにテンプレート・データベースを作成するシェルスクリプト等が入っているし、“templategis”というmakeコマンドのターゲットも存在するが、“make templategis”としてもエラーで終了してしまう。postgis-1.4.1/extras/template_gis/Makefileが今のバージョンの構成に対応していない。template_gisのプログラムは使われなくなったようだ。理由は分からないが。

仕方ないのPostGISのマニュアルとtemplate_gisディレクトリの中を参考にし、PostGISSQLライブラリを使って“自前”の template_postgisデータベースを作成した。

ここで更に、PostGIS用データベースを作成する方法はPostGIS Ver 1.3 と Ver 1.4でパスやファイル名などが微妙に異なっている。以下に両方の手順を載せておくが、Ver 1.3に関してはUbuntu 9.10の標準パッケージとしてインストールしたVer 1.3.5、Ver 1.4に関してはオープンソースからインストールしたVer 1.4.1の例となる。
Ver 1.3での手順

postgres@postgis:~$ createdb template_postgis
postgres@postgis:~$ createlang plpgsql template_postgis
postgres@postgis:~$ psql -d template_postgis -f /usr/share/postgresql-8.3-postgis/lwpostgis.sql
postgres@postgis:~$ psql -d template_postgis -f /usr/share/postgresql-8.3-postgis/spatial_ref_sys.sql

Ver 1.4での手順

postgres@postgis:~$ createdb template_postgis
postgres@postgis:~$ createlang plpgsql template_postgis
postgres@postgis:~$ psql -d template_postgis -f /usr/share/postgresql/8.4/contrib/postgis.sql
postgres@postgis:~$ psql -d template_postgis -f /usr/share/postgresql/8.4/contrib/spatial_ref_sys.sql
postgres@postgis:~$ psql -d template_postgis -f /usr/share/postgresql/8.4/contrib/postgis_comments.sql

ここでVer 1.3の手順には“postgis_comments.sql”を読み込むステップが無いが、これはUbuntu 9.10の標準パッケージからインストールするとpostgis_comments.sqlがインストールされないため。オープンソースのVer 1.3にはpostgis_comments.sqlがあるらしい(未確認)。なお、postgis_comments.sqlは読み込まなくても動作には支障はない。

作成した“template_postgis”をテンプレート・データベースとして扱えるように設定する。また、PostGISのデータベースやテーブルを扱うための“postgis”というロールを作って置き、PostGISデータベースを扱うユーザはこのロールに属せるように設定しておく。
先ず、“postgis”というロールを作る。

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

postgres=# CREATE ROLE postgis;
CREATE ROLE
postgres=#

この例ではpostgisはログイン属性の無い単なるロールであるが、postgisというユーザでPostgreSQLへアクセスし管理したい場合は、CREATE USERを使ってロールを作成しても構わない。
次に、データベースtemplate_postgisやその中のテーブルのオーナーをpostgisに変更する。

postgres=# ALTER DATABASE template_postgis OWNER TO postgis ;
ALTER DATABASE
postgres=# \c template_postgis
psql (8.4.2)
You are now connected to database "template_postgis".
template_postgis=# \d
              List of relations
 Schema |       Name       | Type  |  Owner
--------+------------------+-------+----------
 public | geometry_columns | table | postgres
 public | spatial_ref_sys  | table | postgres
(2 rows)

template_postgis=# ALTER TABLE geometry_columns OWNER TO postgis ;
ALTER TABLE
template_postgis=# ALTER TABLE spatial_ref_sys  OWNER TO postgis ;
ALTER TABLE
template_postgis=# \d
              List of relations
 Schema |       Name       | Type  |  Owner
--------+------------------+-------+---------
 public | geometry_columns | table | postgis
 public | spatial_ref_sys  | table | postgis
(2 rows)

template_postgis=# 

最後にデータベースtemplate_postgisにテンプレート属性を設定し、更に“接続不可”属性を与える。

template_postgis=# VACUUM FULL ;
VACUUM
template_postgis=# VACUUM FREEZE ;
VACUUM
template_postgis=# \c postgres
psql (8.4.2)
You are now connected to database "postgres".
postgres=# UPDATE pg_database SET datistemplate = TRUE WHERE datname = 'template_postgis' ;
UPDATE 1
postgres=# UPDATE pg_database SET datallowconn = FALSE WHERE datname = 'template_postgis' ;
UPDATE 1
postgres=# \q
postgres@postgis:~$ 

参考までに、以上の手続きをLinuxシェルから実行する場合の手順を次に載せておく。これをシェルスクリプトにまとめればPostGISテンプレート作成プログラムが出来る。(PostgreSQL管理者アカウント(“postgres”等)で実行する。)

createdb template_postgis
createlang plpgsql template_postgis
psql -d template_postgis -f /usr/share/postgresql/8.4/contrib/postgis.sql
psql -d template_postgis -f /usr/share/postgresql/8.4/contrib/spatial_ref_sys.sql
psql -d template_postgis -f /usr/share/postgresql/8.4/contrib/postgis_comments.sql

psql -c "CREATE ROLE postgis ;"
psql -c "ALTER DATABASE template_postgis OWNER TO postgis ;"
psql -d template_postgis -c "ALTER TABLE geometry_columns OWNER TO postgis ;"
psql -d template_postgis -c "ALTER TABLE spatial_ref_sys  OWNER TO postgis ;"
psql -d template_postgis -c "VACUUM FULL ;"
psql -d template_postgis -c "VACUUM FREEZE ;"
psql -c "UPDATE pg_database SET datistemplate = TRUE WHERE datname = 'template_postgis' ;"
psql -c "UPDATE pg_database SET datallowconn = FALSE WHERE datname = 'template_postgis' ;"

以上でPostGISデータベースを利用する準備が整った。
⇒次へ   ⇒トップへ

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データベースをアクセスした。