目次
本章では,PostGISのインストールに必要な手順について説明します.
tar xvfz postgis-1.5.1.tar.gz cd postgis-1.5.1 ./configure make make install createdb yourdatabase createlang plpgsql yourdatabase psql -d yourdatabase -f postgis.sql psql -d yourdatabase -f postgis_comments.sql psql -d yourdatabase -f spatial_ref_sys.sql
本章の残りで,上記のステップそれぞれの説明をします.
PostGISには,ビルド,利用するために,次のものが必要です.
必須
PostgreSQL 8.3以上.PostgreSQLの完全なインストール(サーバヘッダを含む)が必要です. PostgreSQLは http://www.postgresql.org にあります.
完全なPostgreSQL/PostGISサポートマトリクスとPostGIS/GEOSのサポートマトリクスは http://trac.osgeo.org/postgis/wiki/UsersWikiPostgreSQLPostGIS にあります.
GNU Cコンパイラ(gcc
).ANSI Cコンパイラの中には,PostGISをコンパイルできるものもありますが,gcc
でコンパイルするのが最も問題が少ないと見ています.
NU Make (gmake
または make
). 多くのシステムで,GNU make
がデフォルトの make になっています.make -v
を実行して版を確認して下さい.他版の make
では,PostGISの Makefile
を完全に処理しきれないかもしれません.
投影変換ライブラリ Proj4 の 4.6.0版以上.Proj4ライブラリは,PostGISの座標系投影変換サポートに使われます.Proj4は,http://trac.osgeo.org/proj/ からダウンロードできます.
ジオメトリライブラリ GEOS の 3.1.1版以上.GEOS 3.2 を推奨します. GEOS 3.2 以外では,トポロジ例外の処理が強化され, ST_Bufferで接続部の面取り接合や鋭角接合が可能となり,またバッファの速度が向上しています. GEOSライブラリは,PostGISでの ジオメトリテスト (ST_Touches(), ST_Contains(), ST_Intersects()) や ジオメトリ演算 (ST_Buffer(), ST_Union(), ST_Intersection(), ST_Difference()) を行うのに使われます. GEOSは,http://trac.osgeo.org/geos/ からダウンロードできます.
オプション
java
ディレクトリ下のドライバのビルドを行うには Apache ANT (ant
) が必要です.
Antは http://ant.apache.org にあります.
文書のビルドには DocBook (xsltproc
) が必要です.
Docbook は http://www.docbook.org/ にあります.
文書をPDFでビルドするには DBLatex (dblatex
) が必要です.
DBLatex は http://dblatex.sourceforge.net/ にあります.
文書で使う画像を生成するには ImageMagick (convert
) が必要です.
ImageMagix は http://www.imagemagick.org/ にあります.
ダウンロードサイト http://postgis.refractions.net/download/postgis-1.5.1.tar.gz から,ソースのアーカイブを入手します.
wget http://postgis.refractions.net/download/postgis-1.5.1.tar.gz tar -xvzf postgis-1.5.1.tar.gz
これで,カレントディレクトリの下に postgis-1.5.1
ができます.
もしくは svn レポジトリ http://svn.osgeo.org/postgis/trunk/ からチェックアウトします.
svn checkout http://svn.osgeo.org/postgis/trunk/ postgis-1.5.1
新しく作られた postgis-1.5.1
ディレクトトリに移動して,インストールを続けます.
![]() | |
多くのOSでは,ビルドされたPostgreSQL/PostGISパッケージがあります. 多くの場合,コンパイルが必要なのは,最もひどい最先端の版が欲しい場合やパッケージメンテナンス人ぐらいです. |
PostGISモジュールは,PostgreSQLバックエンドサーバの拡張です. PostGIS 1.5.1 では,コンパイルのために,完全なPostgreSQLサーバヘッダが必要です. PostgreSQL 8.3以上でビルドできます.古い版のPostgreSQLはサポートされません.
PostgreSQLのインストールを済ませていない場合は,PostgreSQLインストールガイドをご覧ください. http://www.postgresql.org (訳注: 日本語版は http://www.postgresql.jp/) にあります.
![]() | |
GEOS機能のために,PostgreSQLをインストールする際に,PostgreSQLに標準C++ライブラリへの明示的なリンクが必要になるかもしれません. LDFLAGS=-lstdc++ ./configure [YOUR OPTIONS HERE] これは,古い開発ツールとインチキC++例外との対話のための応急処置です.怪しい問題(望んでいないのにバックエンドが閉じたりそれに近い挙動を起こす)を経験したなら,このトリックを試してみて下さい.もちろん,これを行うにはPostgreSQLをはじめからコンパイルし直す必要があります. |
次のステップでは,PostGISソースのコンフィギュレーションとコンパイルに概要を記述します. これらは,Linuxユーザ用に書いてありますので,WindowsやMacでは動作しません.
ほとんどのLinuxのインストールと同様に,最初のステップでは,ソースコードのビルドに使われる Makefile を生成します.これは,シェルスクリプトで行います.
./configure
パラメータを付けない場合は,このコマンドは自動で,PostGISのソースコードのビルドを行うのに必要なコンポーネントやライブラリを,システム上で探します. ./configure とするのが一般的な使い方ですが,標準的でない位置に必要なライブラリやプログラムを置いてある場合のために,いくつかのパラメータを受け付けます.
次のリストで,共通して使われるパラメータを示します. 完全なリストについては, --help または --help=short パラメータを使って下さい.
PostGISライブラリとSQLスクリプトのインストール先を指定します. デフォルトでは,検出されたPostgreSQLのインストール先と同じになります.
![]() | |
このパラメータは現在のところ壊れていて,PostgreSQLのインストール先にしかインストールされません.このバグのトラックについては http://trac.osgeo.org/postgis/ticket/160 をご覧ください. |
PostgreSQLは,PostGISなどの拡張に対してPostgreSQLのインストール先ディレクトリを伝える pg_config というユーティリティを持っています. PostGISの対象とするPostgreSQLインストール先を手動で指定する場合は,このパラメータ (--with-pgconfig=/path/to/pg_config) を使います.
必須のジオメトリライブラリであるGEOSは,ソフトウェアのインストール時にGEOSのインストール先ディレクトリを伝える geos-config というユーティリティを持っています. PostGISのビルドに使う特定のGEOSを手動で指定する場合は,このパラメータ (--with-geosconfig=/path/to/geos-config) を使います.
Proj4はPostGISに必須の投影変換ライブラリです.ostGISのビルドに使う特定のProj4のディレクトリを手動で指定する場合は,このパラメータ (--with-projdir=/path/to/projdir) を使います.
データインポートGUI(GTK+2.0が必要)をコンパイルします. このパラメータによって,shp2pgsql-gui という,shp2pgsqlのグラフィカルユーザインタフェースが作成されます.
![]() | |
PostGISを SVN レポジトリを得た場合は,本当は最初に次のスクリプトを実行します. ./autogen.sh このスクリプトは,PostGISのインストールのカスタマイズを行うための configure スクリプトを生成するものです. PostGISをtarballから得た場合は, configure が既に生成されているので ./autogen.sh を実行する必要はありません. |
Makefileが生成されたら,PostGISのビルドは,次のコマンドを実行するだけです.
make
出力の最後の行が "PostGIS was built successfully. Ready to install.
" と出れば終わりです.
PostGIS 1.4.0版からは,全ての関数に文書から生成されるコメントが付きます. これらのコメントを後ほどインストールするには,次のコマンドを実行しますが,docbookが必要です. postgis_comments.sql が docフォルダに tar.gz でパッケージ化されます. tarballからインストールする場合は,postgis_comments.sql が docフォルダに入っているので,コメントを生成する必要はありません.
make comments
PostGISのテストを行うには,次のコマンドを実行します.
make check
このコマンドは,実際のPostgreSQLデータベースに対して生成したライブラリを使用した,様々なチェックとレグレッションテストを行います.
![]() | |
PostgreSQL, GEOS または Proj4 を標準の位置にインストールしていない場合には, 環境変数 LD_LIBRARY_PATH に,ライブラリの位置を追加する必要があるかも知れません. |
![]() | |
現在のところ make check は,チェックを行う際に
環境変数 |
成功したら,テストの出力は次のようなかんじになります.
CUnit - A Unit testing framework for C - Version 2.1-0 http://cunit.sourceforge.net/ Suite: PostGIS Computational Geometry Suite Test: test_lw_segment_side() ... passed Test: test_lw_segment_intersects() ... passed Test: test_lwline_crossing_short_lines() ... passed Test: test_lwline_crossing_long_lines() ... passed Test: test_lwpoint_set_ordinate() ... passed Test: test_lwpoint_get_ordinate() ... passed Test: test_lwpoint_interpolate() ... passed Test: test_lwline_clip() ... passed Test: test_lwline_clip_big() ... passed Test: test_lwmline_clip() ... passed Test: test_geohash_point() ... passed Test: test_geohash_precision() ... passed Test: test_geohash() ... passed Suite: PostGIS Measures Suite Test: test_mindistance2d_recursive_tolerance() ... passed --Run Summary: Type Total Ran Passed Failed suites 2 2 n/a 0 tests 14 14 14 0 asserts 84 84 84 0 Creating spatial db postgis_reg TMPDIR is /tmp/pgis_reg_15328 PostgreSQL 8.3.7 on i686-pc-linux-gnu, compiled by GCC gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-44) Postgis 1.4.0SVN - 2009-05-25 20:21:55 GEOS: 3.1.0-CAPI-1.5.0 PROJ: Rel. 4.6.1, 21 August 2008 Running tests loader/Point.............. ok loader/PointM.............. ok loader/PointZ.............. ok loader/MultiPoint.............. ok loader/MultiPointM.............. ok loader/MultiPointZ.............. ok loader/Arc.............. ok loader/ArcM.............. ok loader/ArcZ.......... ok loader/Polygon.............. ok loader/PolygonM.............. ok loader/PolygonZ.............. ok regress. ok regress_index. ok regress_index_nulls. ok lwgeom_regress. ok regress_lrs. ok removepoint. ok setpoint. ok simplify. ok snaptogrid. ok affine. ok wkt. ok measures. ok long_xact. ok ctors. ok sql-mm-serialize. ok sql-mm-circularstring. ok sql-mm-compoundcurve. ok sql-mm-curvepoly. ok sql-mm-general. ok sql-mm-multicurve. ok sql-mm-multisurface. ok geojson. ok gml. ok svg. ok kml. ok regress_ogc. ok regress_bdpoly. ok regress_proj. ok regress_ogc_cover. ok regress_ogc_prep. ok Run tests: 42 Failed: 0
PostGISをインストールするには,次のコマンドを実行します.
make install
これにより,PostGISのインストールファイルが,--prefix パラメータで指定した,適切なサブディレクトリに複写されます.次に特筆すべきサブディレクトリを示します.
ローダとダンパのバイナリのインストール先は [prefix]/bin
.
postgis.sql
などの SQLファイルのインストール先は [prefix]/share/contrib
.
PostGISライブラリのインストール先は [prefix]/lib
.
先に make comments を実行していた場合は,次のコマンドを実行すると,SQLファイルのインストール先に postgis_comments.sql
がインストールされます.
make comments-install
![]() | |
|
PostGISデータベースを作るた最初のステップは,単純なPostgreSQLデータベースの作成です.
createdb [yourdatabase]
多くのPostGIS関数は,PL/pgSQL手続き言語で書かれています. 次のステップは,PL/pgSQL言語を新たに作成したデータベースで有効にすることです. 次のコマンドを実行します.
createlang plpgsql [yourdatabase]
次に,PostGISオブジェクトと関数定義をデータベースにロードします.
定義ファイル postgis.sql
( [prefix]/share/contrib
にあります ) をロードします.
psql -d [yourdatabase] -f postgis.sql
完全なEPSG座標系定義IDセットについては,spatial_ref_sys.sql
定義ファイルをロードして spatial_ref_sys
を生成して下さい.
これによりジオメトリ関数 ST_Transform() が実行できるようになります.
psql -d [yourdatabase] -f spatial_ref_sys.sql
PostGISが持つ関数についての助けとなるコメントが必要なら, postgis_comments.sql
を,データベースにロードします.コメントは,psqlターミナルウィンドウで単に \dd [function_name] とすれば見ることができます.ロードは次のようにします.
psql -d [yourdatabase] -f postgis_comments.sql
PostGISのディストリビューション (特にPostGIS >= 1.1.5 の Win32インストーラ) の中には,
template_postgis
というテンプレートにPostGIS関数をロードしているこt5おがあります.
PostgreSQLに template_postgis
データベースが存在るなら,空間データベースの生成がコマンドひとつで済みます.
この二種類のやり方のどちらを使うににしても,データベースユーザは,新しいデータベースを作成する権限を与えられる必要があります.
シェルからの実行:
# createdb -T template_postgis my_spatial_db
SQLからの実行:
postgres=# CREATE DATABASE my_spatial_db TEMPLATE=template_postgis
既にある空間データベースのアップグレードは,新しいPostGISオブジェクト定義の置き換えや導入を必要とするとき,慎重を要することがあります.
不幸なことに,定義の全てが実行中のデータベース内で簡単には置き換えられるわけではないので,ダンプ/リロードが最善策となることがあります.
PostGISには,マイナーバージョンアップやバグフィクスリリースの場合に使うソフトアップグレードと,メジャーアップグレードで使うハードアップグレードが用意されています.
PostGISをアップグレードしようとする前にデータのバックアップを取ることは,常に価値のあるものです. pg_dumpで -Fc フラグを使うと,ハードアップグレードによってダンプをリストアすることができます.
コンパイル後に postgis_upgrade*.sql
を探して下さい.
PostGISの版にあったものをインストールします.
たとえば,PostGIS 1.3 から 1.5 に上げるには postgis_upgrade_13_to_15.sql
を使います.
$ psql -f postgis_upgrade_13_to_15.sql -d your_spatial_database
ソフトアップグレードができなかった場合に,スクリプトは強制終了されて,ハードアップグレードが必要であると警告されますので,先にソフトアップグレードを実行することをためらってはなりません.
![]() | |
$ utils/postgis_proc_upgrade.pl postgis.sql > postgis_upgrade.sql |
ハードアップグレードは,PostGISデータベースの完全なダンプ/リロードを意味します. PostGISオブジェクトの内部ストレージが変更されていたり, ソフトアップグレードができない場合には,ハードアップグレードが必要です. 付録の Release Notes に,それぞれの版でアップグレードする際にダンプ/リロード(ハードアップグレード)が必要かの報告があります.
PostGISは,pg_dump -Fc コマンドで生成されたダンプのリストアを行うユーティリティスクリプトを提供しています. 実験版ですが,このスクリプトの出力をファイルにリダイレクトすると,問題のある場合に助けになります. 手続きは次の通りです.
アップグレードしたいデータベース("olddb"と呼ぶことにしましょう)のダンプを「カスタム書式」で作成します.
$ pg_dump -Fc olddb > olddb.dump
PostGISのアップグレードを行うダンプを,新しいデータベースにリストアします. 新しいデータベースは存在している必要はありません. postgis_restore は,ダンプファイル名の後にcreatedbパラメータを指定すると,これを受けつけます. たとえば,データベースでデフォルトでない文字コードを使っているとしても,このスクリプトを使うことができます. 新しいデータベースは newdb と呼ぶことにして,このデータベースの文字コードをUNICODEにするなら,次のようになります.
$ sh utils/postgis_restore.pl postgis.sql newdb olddb.dump -E=UNICODE > restore.log
全てのリストアしたダンプオブジェクトが本当にリストアされ, postgis.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=> truncate spatial_ref_sys; TRUNCATE newdb=> \i spatial_ref_sys.sql
インストールやアップグレードが思うようにいかない時にチェックすることがいくつかあります.
PostgreSQL 8.1 以上をインストールしているか,実行中のPostgreSQLと同じ版のソースでコンパイルしているか,をチェックします.(Linuxの)ディストリビューションによって既にPostgreSQLがインストールされている時や, PostgreSQLを以前にインストールして忘れた場合に, 混乱が発生することがあります.PostGIS は PostgreSQL 8.1 以上で動作します.古い版のものを使った場合には,おかしな予想外のエラーメッセージが表示されます.実行中のPostgreSQLの版をチェックするには,psqlを使ってデータベースを接続して,次のクエリを実行して下さい.
SELECT version();
RPMベースのディストリビューションを実行している場合, プリインストールされたパッケージが存在するかのチェックは,rpm コマンドを使って rpm -qa | grep postgresql でチェックできます.
また,コンフィギュアが正しくPostgreSQL,Proj4ライブラリ,GEOSライブラリの位置を検出したかチェックして下さい.
コンフィギュアからの出力で postgis_config.h
ファイルが作られます.
POSTGIS_PGSQL_VERSION
,POSTGIS_PROJ_VERSION
,POSTGIS_GEOS_VERSION
変数が正しくセットされたかをチェックして下さい.
JDBC拡張によって,JavaオブジェクトがPostGISの内部型に対応できるようになります. このオブジェクトを使って,PostGISデータベースに問い合わせを出して,PostGISにあるGISデータの描画や計算を行うJavaクライアントを作成することができます.
PostGISディストリビューションの java/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.5.1/loader # make # make install
ローダは shp2pgsql
と呼ばれ, ESRIシェープファイルを PostGIS/PostgreSQL にロードするのに適したSQLに変換します.ダンパは pgsql2shp
と呼ばれ,PostGISのテーブル(またはクエリ)からESRIシェープファイルに変換します.より詳しいドキュメントをご覧になるには,オンラインヘルプとマニュアルページをご覧ください.