6.9. 幾何関数と演算子

point (点)box (矩形)lsegline (線分)path (道)polygon (多角形)、および circle (円) 幾何データ型には、PostgreSQL が元々サポートしている関数と演算子が豊富に揃っています (Table 6-20Table 6-21、および Table 6-22 参照)。

Table 6-20. Geometric Operators

演算子説明使用法
+ 並行移動box '((0,0),(1,1))' + point '(2.0,0)'
- 並行移動box '((0,0),(1,1))' - point '(2.0,0)'
* 縮尺/回転box '((0,0),(1,1))' * point '(2.0,0)'
/ 縮尺/回転box '((0,0),(2,2))' / point '(2.0,0)'
# 交差'((1,-1),(-1,1))' # '((1,1),(-1,-1))'
# 道もしくは多角形の点の数# '((1,0),(0,1),(-1,0))'
## 近接点point '(0,0)' ## lseg '((2,0),(0,2))'
&& 重なり?box '((0,0),(1.1))' && box '((0,0),(2,2))'
&< 左側に重なり?box '((0,0),(1.1))' &< box '((0,0),(2,2))'
&> 右側に重なり?box '((0,0),(3,3))' &> box '((0,0),(2,2))'
<-> 距離circle '((0,0),1)' <-> circle '((5,0),1)'
<< 左?circle '((0,0),1)' << circle '((5,0),1)'
<^ 下?circle '((0,0),1)' <^ circle '((0,5),1)'
>> 右?circle '((5,0),1)' >> circle '((0,0),1)'
>^ 上?circle '((0,5),1)' >^ circle '((0,0),1)'
?# 交差か重なりlseg '((-1,0),(1,0))' ?# box '((-2,-2),(2,2))'
?- 水平?point '(1,0)' ?- point '(0,0)'
?-| 直交?lseg '((0,0),(0,1))' ?-| lseg '((0,0),(1,0))'
@-@ 長さ、あるいは円周@-@ path '((0,0),(1,0))'
?| 垂直?point '(0,1)' ?| point '(0,0)'
?|| 並行?lseg '((-1,0),(1,0))' ?|| lseg '((-1,2),(1,2))'
@ 内包、あるいは上層point '(1,1)' @ circle '((0,0),2)'
@@ 中心@@ circle '((0,0),10)'
~= 等しいpolygon '((0,0),(1,1))' ~= polygon '((1,1),(0,0))'

Table 6-21. 幾何関数

関数返り値説明
area(object)double precision (倍精度)要素の面積area(box '((0,0),(1,1))')
box(box, box)box (矩形)矩形の交差box(box '((0,0),(1,1))',box '((0.5,0.5),(2,2))')
center(object)point (座標点)要素の中心center(box '((0,0),(1,2))')
diameter(circle)double precision (倍精度)円の半径diameter(circle '((0,0),2.0)')
height(box)double precision (倍精度)矩形の高さheight(box '((0,0),(1,1))')
isclosed(path)boolean (論理値)閉じた道?isclosed(path '((0,0),(1,1),(2,0))')
isopen(path)boolean (論理値)開いた道?isopen(path '[(0,0),(1,1),(2,0)]')
length(object)double precision (倍精度)要素の長さlength(path '((-1,0),(1,0))')
npoints(path)integer点の数npoints(path '[(0,0),(1,1),(2,0)]')
npoints(polygon)integer点の数npoints(polygon '((1,1),(0,0))')
pclose(path)path (道)道を閉じる変換popen(path '[(0,0),(1,1),(2,0)]')
popen(path)path (道)開いた道に変換popen(path '((0,0),(1,1),(2,0))')
radius(circle)double precision (倍精度)円の半径radius(circle '((0,0),2.0)')
width(box)double precision (倍精度)width(box '((0,0),(1,1))')

Table 6-22. 幾何型変換関数

関数返り値説明
box(circle)box (矩形)円から矩形box(circle '((0,0),2.0)')
box(point, point)box (矩形)座標点を矩形に変換box(point '(0,0)', point '(1,1)')
box(polygon)box (矩形)多角形を矩形に変換box(polygon '((0,0),(1,1),(2,0))')
circle(box)circle (円)円に変換circle(box '((0,0),(1,1))')
circle(point, double precision)circle (円)座標点を円に変換circle(point '(0,0)', 2.0)
lseg(box)lseg (線分)矩形の対角線を lseg (線分) に変換lseg(box '((-1,0),(1,0))')
lseg(point, point)lseg (線分)座標点を lseg (線分) に変換lseg(point '(-1,0)', point '(1,0)')
path(polygon)point (座標点)多角形を道に変換path(polygon '((0,0),(1,1),(2,0))')
point(circle)point (座標点)円の中心point(circle '((0,0),2.0)')
point(lseg, lseg)point (座標点)intersectionpoint(lseg '((-1,0),(1,0))', lseg '((-2,-2),(2,2))')
point(polygon)point (座標点)円の中心point(polygon '((0,0),(1,1),(2,0))')
polygon(box)polygon (多角形)4 角形polygon(box '((0,0),(1,1))')
polygon(circle)polygon (多角形)12 角形polygon(circle '((0,0),2.0)')
polygon(npts, circle)polygon (多角形)npts 多角形polygon(12, circle '((0,0),2.0)')
polygon(path)polygon (多角形)道から多角形に変換polygon(path '((0,0),(1,1),(2,0))')

2 つの構成要素の複数の point に、添字 0、1 を有する配列にアクセスするのと同じように、アクセスすることができます。 たとえば、t.ppoint 列の場合、SELECT p[0] FROM t という式で X 座標点を抽出できます。 また、UPDATE t SET p[1] = ... で Y 座標点を変更できます。 同様に、box または lseg でも、2 つの point を配列のように扱うことが可能です。