PerlさんPerlくん
[GIS][PostGIS][PgGIS]PgSQLのデータベースでPostGISが使えるようにする
最終更新:
atwikimyj
-
view
PgSQLのデータベースでPostGISが使えるようにする
PostGISが使えるようになるまでが結構ややこしいので
整理。
整理。
(1)postgreSQLの起動
postgreSQLがインストール済みで、なおかつ起動している
状態にする。
postgreSQLがインストール済みで、なおかつ起動している
状態にする。
(2)pl/pgsql言語サポートの有効化
これはpgSQLの話になるが、pgSQL上でストアドファンクション、、
つまりスクリプト的なクエリの実行テキストの言語のことが
pl/pgsqlなのだ。それはデフォルトでは有効になっていない。
有効にするには下記のコマンドを実行(shellからできます)
下記のコマンドを見てわかるとおり、DB単位でこの操作が必要。
これはpgSQLの話になるが、pgSQL上でストアドファンクション、、
つまりスクリプト的なクエリの実行テキストの言語のことが
pl/pgsqlなのだ。それはデフォルトでは有効になっていない。
有効にするには下記のコマンドを実行(shellからできます)
下記のコマンドを見てわかるとおり、DB単位でこの操作が必要。
*************************************
$ createlang plpgsql mydb
*************************************
現在有効になっているのかどうか確認するには
*************************************
$ psql -d mydb
(ここでpgSQLの初期説明文章が出て
SQLクエリ入力待ちになります)
SQLクエリ入力待ちになります)
mydb-# select * from pg_language;
*************************************
こうすると、何行か表が出るが、その中で
plpgsql
というのが表示されていればOK。
plpgsql
というのが表示されていればOK。
(3)lwpostgis.sqlの読み込み
postgreSQLでPostGISを使うには、DBに対してSQL文を
実行するという処理が必要。
実行するという処理が必要。
以下のコマンドを実行(psqlにオプションをつけて実行している)
データベース名:test
$ psql -d test -f /usr/local/pgsql/share/lwpostgis.sql
データベース名:test
$ psql -d test -f /usr/local/pgsql/share/lwpostgis.sql
※lwpostgis.sql を実行するとエラーが出る。
参考:http://www.officeyano.net/installpostgis.htm
参考:http://www.officeyano.net/installpostgis.htm
libgeos_c.so.1 is not found.
対処策としてはlibのシンボリックファイルをpgsqlのフォルダにつける
対処策としてはlibのシンボリックファイルをpgsqlのフォルダにつける
*******************************
NOTICE: type "histogram2d" is not yet defined
DETAIL: Creating a shell type definition.
ERROR: could not load library "/usr/local/pgsql/lib/libgeos.so_c.1.1.1"
DETAIL: Creating a shell type definition.
ERROR: could not load library "/usr/local/pgsql/lib/libgeos.so_c.1.1.1"
*******************************
どうやら
/usr/local/pgsql/lib の中に
libgeos.so_c.1.1.1
がないよ!というエラーのよう。実際にはこのファイルは
/usr/local/lib/
の下にあるのです(ライブラリの作成先がこのsqlのデフォルト値と
微妙に違ったみたい)
ということで、シンボリックリンクを張ってどうにかしのぎます。
/usr/local/pgsql/lib の中に
libgeos.so_c.1.1.1
がないよ!というエラーのよう。実際にはこのファイルは
/usr/local/lib/
の下にあるのです(ライブラリの作成先がこのsqlのデフォルト値と
微妙に違ったみたい)
ということで、シンボリックリンクを張ってどうにかしのぎます。
$ cd /usr/local/pgsql/lib
$ ln -s /usr/local/lib/libgeos.so_c libgeos_c.so
$ ln -s /usr/local/lib/libgeos.so_c.1 libgeos_c.so.1
$ ln -s /usr/local/lib/libgeos.so_c.1.1.1 libgeos_c.so.1.1.1
$ ln -s /usr/local/lib/libgeos.so_c libgeos_c.so
$ ln -s /usr/local/lib/libgeos.so_c.1 libgeos_c.so.1
$ ln -s /usr/local/lib/libgeos.so_c.1.1.1 libgeos_c.so.1.1.1
※上記3つのファイルについて「ないよー」とエラーが出ていたので
3つともシンボリックリンクを張りました。
3つともシンボリックリンクを張りました。
これで再度クエリを走らせるとなんとかエラーがなくなりました。
(参考)postGISのユーザフォーラムを参考にしました。
(参考)postGISのユーザフォーラムを参考にしました。
http://postgis.refractions.net/pipermail/postgis-users/2004-August/005383.html
(4)spatial_ref_sys.sqlの読み込み
投影法に関する情報を、テーブルspatial_ref_sysに読み込みます。
これをしないとPostGISで投影法の変換ができません。
これをしないとPostGISで投影法の変換ができません。
*******************************
psql -d mydb -f /usr/local/pgsql/share/spatial_ref_sys.sql
*******************************
すると画面上では
*******************************
$ insert 0 1
$ insert 0 1
$ insert 0 1
$ insert 0 1
$ insert 0 1
$ insert 0 1
$ insert 0 1
(3000行以上続く)
COMMIT
$ insert 0 1
$ insert 0 1
$ insert 0 1
$ insert 0 1
$ insert 0 1
$ insert 0 1
(3000行以上続く)
COMMIT
*******************************
と表示されるはず。
さて、本当に動いているのでしょうか?
以下のコマンドの復習もかねて確認します。
以下のコマンドの復習もかねて確認します。
mydb=# \dt mydb内のテーブル一覧が出ます。
mydb=# \df mydb内のファンクション一覧が出ます。
mydb=# \df mydb内のファンクション一覧が出ます。
下記でpostgis関連(と思われる名前)のファンクション一覧を出します。
mydb=# \df postgis*
これで出れば問題なしです。
mydb=# \df postgis*
これで出れば問題なしです。