PostgreSQL用 多次元幾何オブジェクト

概要
多次元幾何オブジェクト geometric型の仕様
行列オブジェクト matrix型の仕様


多次元幾何オブジェクト geometric型の仕様

geometric型がサポートしている幾何データの種類
geometric型がサポートしている関数

オブジェクトの種類を取得します。取得できる値は以下のとおりです。

種類
box ボックス
primitive プリミティブ

オブジェクトが何次元の要素で構成されているかを取得します。

オブジェクトがいくつの点を持っているかを取得します。

第2引数の座標が格納されたオブジェクトから第1引数で指定した構成要素を取り出します。指定できるものは以下のとおりです。

要素名 意味
dim<整数> <整数>で指定した次元要素の値(“dim1”で1次元目)
x 1次元目の要素の値
y 2次元目の要素の値
z 3次元目の要素の値
point<整数> <整数>番目の点の座標値(“point1”で1点目)
start 開始点
end 終了点
center 開始点と終了点の中点

2つのオブジェクトが等しいかテストします。2つが合同であっても座標の指定の方法などが厳密に一致しなければ、falseとなります。

下記のオペレータと等価です。

geometric = geometric

2つのオブジェクトが合同かテストします。

下記のオペレータと等価です。

geometric ~= geometric

第1引数のオブジェクトが、第2引数のオブジェクト全体を含んでいるかテストします。

下記のオペレータと等価です。

geometric ~ geometric

第1引数のオブジェクトが、第2引数のオブジェクトに完全に含まれているかテストします。

下記のオペレータと等価です。

geometric @ geometric

2つのオブジェクトが一部でも重複しているかテストします。

下記のオペレータと等価です。

geometric && geometric

2つのオブジェクトを完全に含むオブジェクトを生成します。出力結果は常にボックスです。

すでに仕様変更の予感あり。

2つのオブジェクトの重複している部分のみを表すオブジェクトを生成します。この関数では、最初に2つのオブジェクトを境界矩形(BOUND BOX)に変換してから演算します。出力結果は常にボックスです。重複している部分がない場合にはNULLを返します。

すでに仕様変更の予感あり。

オブジェクトの容量(面積や体積)を計算します。オブジェクトがプリミティブの場合は、その境界矩形(BOUND BOX)の容量を出力します。この仕様は単に手抜きですが、いずれきちんと実装する予定です。

オブジェクトを座標変換します。第1引数をA、第2引数をM、返り値をBとすると、次の計算式と概念が似ています。

B = A M

この関数では平行移動をサポートするために、変換する幾何オブジェクトの次元数より1行以上大きな変換行列を与える必要があります。

3次元の場合の考え方は以下のとおりです。

[X, Y, Z, 1] = [X0, Y0, Z0, 1] * [M11, M12, M13, 0]
                                 [M21, M22, M23, 0]
                                 [M31, M32, M33, 0]
                                 [M41, M42, M43, 1]

(X0, Y0, Z0) は変換前の座標値、(X, Y, Z) は変換後の座標値です。M??を含む行列は変換行列です。なお、(M11〜M33) までの各数値は回転やスケーリングを、(M41, M42, M43) の各数値は平行移動を制御します。

下記のオペレータと等価です。

geometric ** matrix

オブジェクトを平行移動します。指定する行列は行ベクトル扱いです。つまり1行×N桁の行列とします。

下記のオペレータと等価です。

geometric + matrix

オブジェクトを逆方向に平行移動します。指定する行列は行ベクトル扱いです。つまり1行×N桁の行列とします。

下記のオペレータと等価です。

geometric - matrix

多次元幾何オブジェクトを浮動小数点に変換します。多次元幾何オブジェクトは1点1次元でなければなりません。この機能は、暗黙の型変換としても行われます。

浮動小数点を多次元幾何オブジェクトに変換します。変換された多次元幾何オブジェクトは1点1次元になります。この機能は、暗黙の型変換としても行われます。

geometric型がサポートしているオペレータ

2つのオブジェクトが等しいかテストします。2つが合同であっても座標の指定の方法などが厳密に一致しなければ、falseとなります。rtreeアクセスメソッドによるインデックス検索には利用できません(このオペレータではシーケンシャルスキャンになります)。

下記の関数と等価です。

geometric_equal(geometric, geometric) returns bool

2つのオブジェクトが合同かテストします。rtreeアクセスメソッドによるインデックス検索に利用できます。

下記の関数と等価です。

geometric_same(geometric, geometric) returns bool

第1引数のオブジェクトが、第2引数のオブジェクト全体を含んでいるかテストします。
rtreeアクセスメソッドによるインデックス検索に利用できます。

下記の関数と等価です。

geometric_contains(geometric, geometric) returns bool

第1引数のオブジェクトが、第2引数のオブジェクトに完全に含まれているかテストします。
rtreeアクセスメソッドによるインデックス検索に利用できます。

下記の関数と等価です。

geometric_contained(geometric, geometric) returns bool

2つのオブジェクトが一部でも重複しているかテストします。rtreeアクセスメソッドによるインデックス検索に利用できます。

下記の関数と等価です。

geometric_overlaps(geometric, geometric) returns bool

オブジェクトを座標変換します。

下記の関数と等価です。

geometric_transform(geometric, matrix) returns geometric

オブジェクトを平行移動します。

下記の関数と等価です。

geometric_shift(geometric, matrix) returns geometric

オブジェクトを逆方向に平行移動します。

下記の関数と等価です。

geometric_nshift(geometric, matrix) returns geometric


Copyright (c) 1999 InterWIZ <staff@interwiz.koganei.tokyo.jp>, All rights reserved.
Supported by MINISTRY OF POSTS AND TELECOMMUNICATIONS (MPT) of japan
Supported by NTT Communications Corporation
Supported by KOKUSAI KOGYO CO., LTD.

インターウィズはこのプロジェクトにおいて、
郵政省のGIS技術開発プログラムの一環として活動しています。


ホームページ最新情報インターウィズ!?サービス紹介ソフトウェア工房メーリングリストNetSmile