PostGIS
PostgreSQL
概要
PostGIS は PostgreSQL の地理情報オブジェクトの拡張です。
これにより、PostgreSQL 上で地理情報が非常に簡単に扱えるようになります。
インストール
PostGIS をインストールするには、以下がインストールされている必要があります。
PostgreSQL
Proj.4
GEOS
まず初めに、公式サイトからアーカイブを取得して、展開します。
% gzip -dc postgis-1.5.1.tar.gz | tar xvf - % cd postgis-1.5.1
あとはお決まりの手順でOKです。
% ./configure % make % make check % su # make install
これで PostGIS 自体のインストールは完了ですが、これだけでは PostgreSQL には適用できていません。
適用するためには、ターゲットとなる DB に PostGIS オブジェクトと関数定義をロードさせる必要があります。
このために、PL/pgSQL 拡張が必要となりますので、以下を実行します。
% createlang plpgsql [dbname]
上記で準備が出来たので、PostGIS オブジェクトと関数定義を指定した DB に読み込ませます。
PostGIS 拡張を行うための SQL ファイルは通常 /usr/local/psql/share/contrib/postgis-*** に置かれます。
% psql -f /usr/local/pgsql/share/contrib/postgis-1.5/postgis.sql -d [dbname]
EPSG座標系に対応するには、以下の SQL も実行します。
% psql -f /usr/local/pgsql/share/contrib/postgis-1.5/spatial_ref_sys.sql -d [dbname]
緯度経度対応
PostGIS を使うと緯度経度データを使った処理(例えば2点間の地理的な距離を計算するとか)を簡単に行うことが出来ます。
ちなみに、地理的な距離の計算は単なる平面の2点間の距離ではなく、楕円曲面上の2点間の距離となるので、真面目に計算しようとすると複雑な計算式が必要となり、けっこう面倒です(^_^;
緯度経度を地理的なデータとして扱うには、まず初めにジオメトリカラムと呼ばれる属性のカラムを以下のように追加します。
select addgeometrycolumn('table_name', 'field_name', 4326, 'POINT', 2);
ちなみに、上記の 4326 は SRID と呼ばれるもので、使用する座標系を識別する ID です。
SRID 自体は他にも多数あるのですが、緯度経度を使っている限りは、とりあえず 4326 を使っていれば良いみたい。
この辺は、地理データをもう少し真面目に勉強しないと何が何だか、、、、という感じなので、おまじないということで(/_\*)
次に、作成したカラムに緯度経度データを地理情報として登録します。
以下のような感じ。
UPDATE table_name SET geo = GeometryFromText('POINT(140,36)',4326) WHERE id=xxx;
登録した地理データに対して、例えば、(135,00,36,00) からの距離を求める場合には、以下のようにして取得可能です。
SELECT id,distance_spheroid(field_name,GeometryFromText('POINT(135.00 36.00)',4326),'SPHEROID["GRS_1980",6378137,298.257222101]') FROM table_name;
'SPHEROID["GRS_1980",6378137,298.257222101]' についての詳細はよく知りません。
完全に他サイトのコピペ(/_\*)