PostGISの関数を設定することで, PostgreSQLの中から空間関数にアクセス可能になります.
このレッスンの目的: 空間関数をインストールし, それらの効果を簡単にデモする.
ノート
ここではPostGISバージョン2.1を使用を前提としています. インストールとデータベースの設定方法は以前のバージョンと異なりますが, この資料の残りの部分はまだ有効です. インストールおよびデータベースの設定については, お使いのプラットフォームのドキュメントを参照してください.
PostGISはaptから簡単にインストールできます.
$ sudo apt-get install postgis
$ sudo apt-get install postgresql-9.1-postgis
本当に簡単です...
ノート
使用しているUbuntuのバージョンや設定されているリポジトリによって, PostGIS 1.5もしくは2.xがインストールされます. psqlや他のツールで select PostGIS_full_version(); クエリを発行すれば、インストールされたバージョンを知ることができます.
PostGIS最新版をインストールするには, 以下のコマンドが使用できます.
$ sudo apt-add-repository ppa:sharpie/for-science
$ sudo apt-add-repository ppa:sharpie/postgis-nightly
$ sudo apt-get update
$ sudo apt-get install postgresql-9.1-postgis-nightly
Windowsへのインストールは少し複雑ですが、それでも大変ではありません. PostGISのスタックをインストールするには, オンラインである必要があることに注意してください.
まず このダウンロードページ を参照します.
そして このガイド に従ってください.
Windowsへのインストールに関する詳細な情報は PostGISのウェブサイト に掲載されています.
PostGISのウェブサイトのダウンロード<http://postgis.net/install/> _のMacOSXを含む他のプラットフォーム上と他のLinuxディストリビューションへのインストールについての情報を持っています
一度PostGISがインストールされたら、拡張機能を使用するようにデータベースを設定する必要があります。PostGISのバージョン> 2.0をインストールしている場合、これが前の演習からアドレスデータベースを使用してpsqlで次のコマンドを発行するのと同じくらい簡単です。
$ psql -d address -c "CREATE EXTENSION postgis;"
ノート
PostGISの1.5とPostgreSQLのバージョン9.1よりも小さいを使用している場合は、データベースのPostGISの拡張をインストールするためのステップの異なるセットを実行する必要があります。これを行う方法については、_ `` PostGISのドキュメント<http://postgis.net/docs/postgis_installation.html#create_new_db>を参照してください。このマニュアルの 以前のバージョン<http://manual.linfiniti.com/en/postgis/spatial_functions.html#install-plpgsql> _でいくつかの命令もあります。
PostGISは、空間データを扱えるようにPostgreSQLのコア機能を拡張する、データベース機能の集まりと考えることができます。「扱える」とは、格納、検索、クエリおよび操作を意味します。これを行うために、多数の機能が、データベースにインストールされています。
私たちのPostgreSQL:kbd: `address`データベースは今地理空間的、PostGISのおかげで有効になっています。これからのセクションでは、このにたくさんより深く掘り下げるために行くが、迅速に少しテイスターを与えてみましょう。テキストからポイントを作成したいとしましょう。まず、ポイントに関連する機能を見つけるために、psqlのコマンドを使用します。まだ:kbd: `address`データベースに接続されていない場合は、今接続してください。それから実行:
\df *point*
これが探しているコマンドです::kbd: st_pointfromtext。下向き矢印を使用してリストを上から下まで見たあと、:kbd: `q`を押して終了しpsqlのシェルに戻ります。
このコマンドを実行してみましょう:
select st_pointfromtext('POINT(1 1)');
結果:
st_pointfromtext
--------------------------------------------
0101000000000000000000F03F000000000000F03F
(1 row)
注目すべき3点:
POINT(1 1), を使って、ポイントの位置を 1,1 (EPSG:4326 を想定)と定義しました。
SQL文を実行しましたが、どのテーブル上でもなく、SQLプロンプトから入力されたデータで,
結果の行はあまり意味がありません。
得られた行は、「よく知られているバイナリ」(WKB)と呼ばれるOGCフォーマットです。私たちは、次のセクションで詳細にこのフォーマットを見ていきます。
結果をテキストに戻すために、テキストを返す何かのための機能リストを探してクイックスキャンできます:
\df *text
今探しているクエリは:kbd:`st_astext`です。それを前のクエリと組み合わせてみましょう:
select st_astext(st_pointfromtext('POINT(1 1)'));
結果:
st_astext
------------
POINT(1 1)
(1 row)
ここでは、文字列:kbd:`POINT(1,1)`を入力し、:kbd:`st_pointfromtext()`を使用してポイントに変え、:kbd:`st_astext()`で人間が読める形式に戻します。これは元の文字列を返しました。
本当にPostGISの使用の詳細に入る前の最後の例
select st_astext(st_buffer(st_pointfromtext('POINT(1 1)'),1.0));
それは何をしましたか?それは私たちのポイントを中心に1度のバッファを作成し、テキストとして結果を返しました。
PostGISの機能に加えて、拡張欧州石油調査グループ(EPSG)によって定義された空間参照システム(SRS)の定義のコレクションを含んでいます。これらは、座標参照系(CRS)変換などの操作中に使用されます。
通常のデータベーステーブルに格納されているので、データベース中のこれらのSRSの定義を調べることができます。
まずは、psqlのプロンプトで次のコマンドを入力して、テーブルのスキーマを見てみましょう:
\d spatial_ref_sys
これの結果はこのとおりであるべきです:
Table "public.spatial_ref_sys"
Column | Type | Modifiers
-----------+-------------------------+-----------
srid | integer | not null
auth_name | character varying(256) |
auth_srid | integer |
srtext | character varying(2048) |
proj4text | character varying(2048) |
Indexes:
"spatial_ref_sys_pkey" PRIMARY KEY, btree (srid)
(入門セクションから学んだように)このテーブルを表示および操作するために、標準のSQLクエリを使用できます - 何をしているか知らないならば、任意のレコードを更新または削除するのは良いアイデアではない。
興味を持たれる可能性がある一つのSRIDはEPSG:4326です- WGS 84楕円体を使用した緯度/経度の地理基準系。それを見てみましょう:
select * from spatial_ref_sys where srid=4326;
結果:
srid | 4326
auth_name | EPSG
auth_srid | 4326
srtext | GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS
84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,
0,0,0,0,0,0],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,
AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,
AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]
proj4text | +proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs
The srtext is the projection definition in well known text (you may recognise this from .prj files in your shapefile collection).
今PostGISの機能はPostgreSQLのコピーにインストールされています。これを使用すると、PostGISの大規模な空間関数を使用できるようになります。
次はデータベースにおける空間フィーチャの表現方法について学習しましょう。