目次
PostGISのビルドと利用のために、次のものが必要です。
PostgreSQLの完全なインストール (サーバヘッダを含む)。PostgreSQLはhttp://www.postgresql.orgにあります。7.2版以上が必要です。
GNU Cコンパイラ (gcc
)。ANSI Cコンパイラの中には、PostGISをコンパイルできるものもありますが、gcc
でコンパイルするのが最も問題が少ないと見ています。
GNU Make (gmake
またはmake
)。多くのシステムで、GNU makeがデフォルトのmakeになっています。make -v
を実行して版を確認して下さい。他版のmake
では、PostGISのMakefile
を完全に処理しきれないかもしれません。
(推奨) 投影変換ライブラリ Proj4。Proj4ライブラリはPostGISで座標投影変換をサポートするために使われます。Proj4はhttp://www.remotesensing.org/projからダウンロードできます。
(推奨) ジオメトリライブラリ GEOS。GEOSライブラリは、PostGISでジオメトリのチェック (ST_Touches(), ST_Contains(), ST_Intersects())および操作(ST_Buffer(), ST_Union(), ST_Difference()) を提供するために使用します。 GEOSはhttp://geos.refractions.net (訳注: 現在はhttps://trac.osgeo.org/geos/)からダウンロードできます。
PostGISモジュールは、PostgreSQLバックエンドサーバの拡張です。PostGIS 1.3.6をコンパイルするためにPostgreSQLサーバのヘッダの完全なアクセスが必要です。PostgreSQLのソースコードはhttp://www.postgresql.orgにあります。
PostGIS 1.3.6は、PostgreSQL 7.2.0以上で構築できます。それ以前のPostgreSQLには対応しません。
PostGISサーバモジュールをコンパイルする前に、PostgreSQLをコンパイル、インストールする必要があります。
GEOS機能の使用を予定しているなら、PostgreSQLを標準C++ライブラリに、明示的にリンクする必要があることもあります。
LDFLAGS=-lstdc++ ./configure [コンフィギュアオプション]
これは、古い開発ツールとインチキC++例外との対話のための応急処置です。怪しい問題 (望んでいないのにバックエンドが閉じたりそれに近い挙動を起こす)を経験したなら、このトリックを試してみて下さい。もちろん、これを行うにはPostgreSQLをはじめからコンパイルし直す必要があります。
PostGISソースコードのアーカイブはhttp://postgis.refractions.net/download/postgis-1.3.6.tar.gzから取得できます。このアーカイブを解凍します。
# gzip -d -c postgis-1.3.6.tar.gz | tar xvf -
postgis-1.3.6ディレクトリに移動して、次を実行します。
# ./configure
投影変換対応が必要なら、Proj4ライブラリをインストールしておく必要があります。./cofigureでProj4が発見できないなら、--with-proj=PATH
スイッチを使って、Proj4をインストールしたディレクトリを指定してみて下さい。
GEOS機能を使いたい場合は、GEOSライブラリをインストールしておく必要があります。Geos 3.0.3以上を使用した方がいいです。ST_SimplifyPreserveTopologyといった関数で求められます。./cofigureでGEOSが発見できないなら、--with-geos=PATH
で、geos-configプログラムへのフルパスを指定してみて下さい。
コンパイルとインストールのコマンドを実行します。
# make # make install
pg_config
で示される情報を使って全てのファイルがインストールされます。
ライブラリは[pkglibdir]/lib/contrib
にインストールされます。
lwpostgis.sql
といったサポートファイルは[prefix]/share/contrib
にインストールされます。
ローダ/ダンパのバイナリは[bindir]/
にインストルされます。
上に挙げたprojが発見できないか4.5以下を使っている場合は、次を実行してインストールして下さい。
wget http://download.osgeo.org/proj/proj-4.6.0.tar.gz tar xvzf proj-4.6.0.tar.gz cd proj-4.6.0 ./configure && make clean && make make install ldconfig cd ..
上に挙げたgeosが発見できないか3.0以下を使っている場合は、次を実行してインストールして下さい。
wget http://download.osgeo.org/geos/geos-3.0.3.tar.bz2 tar xvjf geos-3.0.3.tar.bz2 cd geos-3.0.3 ./configure && make clean && make make install ldconfig cd ..
PostGISにはPL/pgSQL手続き型言語の拡張が必要です。lwpostgis.sql
ファイルをロードする前に、まずPL/pgSQLを有効にする必要があります。createlang
コマンドを使うべきです。なんらかの理由で手動で行いたい場合にはPostgreSQLプログラマガイドに詳細があります。
# createlang plpgsql [データベース名]
そして、lwpostgis.sql
定義ファイルをロードして、PostGISオブジェクトと関数定義をデータベースにロードします。
psql -d [データベース名] -f rtpostgis.sql
PostGISサーバ拡張はこれでロードされて、使えるようになります。
完全なEPSG座標系定義IDのセットについては、spatial_ref_sys.sql
定義ファイルをロードして、SPATIAL_REF_SYS
を生成して下さい。
# psql -d [データベース名] -f spatial_ref_sys.sql
PostGISが持つ関数に関する助けとなる記述が必要なら、 postgis_comments.sqlファイルをインストールして下さい。
# psql -d [データベース名] -f postgis_comments.sql
PostGISのディストリビューション (特にPostGIS >= 1.1.5のWin32インストーラ)の中には、template_postgis
というテンプレートにPostGIS関数をロードしていることがあります。PostgreSQLにtemplate_postgis
データベースが存在するなら、ユーザやアプリケーションは、空間データベースの生成をコマンドひとつで済ませられます。この2種類のやり方のどちらを使うににしても、データベースユーザは、新しいデータベースを作成する権限を与えられている必要があります。
シェルからの実行は次の通りです。
# createdb -T template_postgis my_spatial_db
SQLからの実行は次の通りです。
postgres=# CREATE DATABASE my_spatial_db TEMPLATE=template_postgis
既存の空間データベースのアップグレードは、新しいPostGISオブジェクト定義の置き換えや導入を必要とするとき、慎重を要することがあります。
不幸なことに、定義の全てが実行中のデータベース内で簡単には置き換えられるわけではないので、ダンプ/リロードが最善策となることがあります。
PostGISには、マイナーバージョンアップやバグフィクスリリースの場合に使うソフトアップグレードと、メジャーアップグレードで使うハードアップグレードが用意されています。
PostGISをアップグレードしようとする前にデータのバックアップを取ることは、常に価値のあるものです。pg_dumpで-Fcフラグを使うと、ハードアップグレードでダンプを常にリストアすることができます。
ソフトアップグレードは、lwpostgis_upgrade.sqlスクリプトを空間データベース上で実行することで行われます。
$ psql -f lwpostgis_upgrade.sql -d [データベース名]
ソフトアップグレードが実行できなかった場合は、スクリプトが中止されて、ハードアップグレードを実行する必要がある旨警告されますが、ソフトアップグレードを最初に実行するのをためらってはなりません。
lwpostgis_upgrade.sql
ファイルが見つからない場合は、1.1版より前の版のものを使っているかも知れません。この場合、次のコマンドで手動で生成する必要があります。
$ utils/postgis_proc_upgrade.pl lwpostgis.sql > lwpostgis_upgrade.sql
ハードアップグレードによって、PostGISが利用できるデータベースの完全なダンプ/リロードを計画します。PostGISオブジェクトの内部ストレージが変更されたり、ソフトアップグレードができなかった場合には、ハードアップグレードが必要です。付録のリリースノートにおいて、それぞれの版にアップグレードする際にダンプ/リロード (ハードアップグレード)が必要かの報告があります。
この目的のために、PostGISは、pg_dump -Fcコマンドによるダンプを格納するためのユーティリティスクリプトを提供しています。これは試験的なもので、出力をファイルにリダイレクトすることで問題がある場合の解決の助けになります。手続きは次の通りです。
アップグレードしたいデータベース ("olddb"と呼ぶことにしましょう)のダンプを「カスタム書式」で作成します。
$ pg_dump -Fc olddb > olddb.dump
PostGISをアップグレードするダンプを、新しいデータベースにリストアします。 新しいデータベースは存在している必要はありません。 postgis_restoreは、ダンプファイル名の後にcreatedbパラメータを指定すると、これを受けつけます。 たとえば、データベースでデフォルトでない文字コードを使っているとしても、このスクリプトを使うことができます。 新しいデータベースは"newdb"と呼ぶことにして、このデータベースの文字コードをUNICODEにするなら、次のようになります。
$ sh utils/postgis_restore.pl lwpostgis.sql newdb olddb.dump -E=UNICODE > restore.log
全ての格納したダンプオブジェクトが本当にダンプから格納されたか、lwpostgis.sql内で定義されているものと衝突していないか、を確認します。
$ grep ^KEEPING restore.log | less
PostgreSQL 8.0より前から8.0以上にアップグレードする場合には、geometry_columnsにあって、もはや必要でないattrelid, varattnum, statsカラムを削除する方が良いかも知れません。保持していても困りません。!!! 本当に必要なのに削除するのは害です !!!
$ psql newdb -c "ALTER TABLE geometry_columns DROP attrelid" $ psql newdb -c "ALTER TABLE geometry_columns DROP varattnum" $ psql newdb -c "ALTER TABLE geometry_columns DROP stats"
spatial_ref_sysテーブルは、独自の追加が保持されることを保障するために、ダンプからリストアされます。しかし、ディストリビュートされたspatial_ref_sysテーブルは変更を含んでいますので、エントリをバックアップし、テーブルを削除して、新しいspatial_ref_sysテーブルを入れるべきです。独自の追加を作っているのでしたら、テーブルをアップグレードする前にバックアップを取る方法を知っていると仮定します。新しいものとの入れ替えは、このように実行します。
$ psql newdb newdb=> drop spatial_ref_sys; DROP newdb=> \i spatial_ref_sys.sql
インストールやアップグレードが思うようにいかない時にチェックすることがいくつかあります。
PostGISディストリビューションをPostgreSQLソースツリーの下のcontribディレクトリに解凍するのが最も簡単です。 しかし、これが何らかの理由で展開できないなら、環境変数PGSQL_SRC
にPostgreSQLソースディレクトリのパスを指定します。これで、PostGISのコンパイルができますが、make installはできないので、PostGISライブラリと実行ファイルを適切な位置に自前で複写することになります。
PostgreSQL 7.2以降をインストールしているか、実行中のPostgreSQLと同じ版のPostgreSQLソースを使ってコンパイルしているか、をチェックします。(Linuxの)ディストリビューションによって既にPostgreSQLがインストールされている時や、PostgreSQLを以前にインストールして忘れた場合に、混乱が発生することがあります。PostGISは、PostgreSQL 7.2以上でのみ動作し、 それより前の版を使うと、おかしな、予想外のエラーメッセージが表示されます。 実行中のPostgreSQLの版をチェックするには、psqlを使ってデータベースを接続して、次のクエリを実行します。
SELECT version();
RPMベースのディストリビューションを実行している場合、プリインストールされたパッケージが存在するかのチェックは、rpmコマンドを使います。rpm -qa | grep postgresqlでチェックできます。
また、Makefile.configの先頭に行った必要な変更を全てチェックして下さい。このチェックは次の通りです。
投影変換をできるようにしたいなら、Proj4ライブラリをインストールして、Makefile.config内の、USE_PROJ
の値を1に設定し、PROJ_DIR
をインストール先プリフィクスにします。
GEOS関数を使いたい場合は、 GEOSライブラリをインストールし、Makefile.config内の、USE_GEOS
を1に設定し、GEOS_DIR
をインストール先プリフィクスにします。
JDBC拡張によって、JavaオブジェクトがPostGISの内部型に対応できるようになります。このオブジェクトを使って、PostGISデータベースに問い合わせを出して、PostGISにあるGISデータの描画や計算を行うJavaクライアントを作成することができます。
PostGISディストリビューションのjdbc
サブディレクトリに移動します。
ant
コマンドを実行します。postgis.jar
ファイルをJavaライブラリを保存しているところに複製します。
JDBC拡張のビルド実行中は現在のCLASSPATHに、PostgreSQL JDBCドライバがあるようにしておく必要があります。PostgreSQL JDBCドライバがCLASSPATHに無い場合には、個別にJDBCドライバのJARのありかを伝えます。次のようにします。
# ant -Dclasspath=/path/to/postgresql-jdbc.jar
PostgreSQL JDBCドライバはhttp://jdbc.postgresql.orgからダウンロードできます。
データのローダとダンパは、PostGISのビルドの一部として、自動的にビルド、インストールされます。手動でビルド、インストールするには、次を実行します。
# cd postgis-1.3.6/loader # make # make install
ローダはshp2pgsql
と呼ばれ、ESRIシェープファイルをPostGIS/PostgreSQLにロードするのに適したSQLに変換します。ダンパはpgsql2shp
と呼ばれ、PostGISのテーブル (またはクエリ)からESRIシェープファイルに変換します。より詳しいドキュメントをご覧になるには、オンラインヘルプとマニュアルページをご覧ください。