?
This document uses PHP Chinese website manual Release
有許多內(nèi)置函數(shù)和操作符支持幾何類型point,box, lseg,line,path, polygon, andcircle, 在Table 9-30, Table 9-31和Table 9-32中展示。
Caution |
請(qǐng)注意"相同"same as""操作符~=表示point, box,polygon,circle類型在一般意義上相同。 這些類型有些還有一個(gè)=操作符,不過它只是比較相同的面積。 其它的標(biāo)量比較操作符(<=等)也是為這些類型比較面積。 |
Table 9-30. 幾何操作符
操作符 | 描述 | 示例 |
---|---|---|
+ | 平移 | box '((0,0),(1,1))' + point '(2.0,0)' |
- | 平移 | box '((0,0),(1,1))' - point '(2.0,0)' |
* | 縮放/旋轉(zhuǎn) | box '((0,0),(1,1))' * point '(2.0,0)' |
/ | 縮放/旋轉(zhuǎn) | box '((0,0),(2,2))' / point '(2.0,0)' |
# | 交點(diǎn)或交面 | '((1,-1),(-1,1))' # '((1,1),(-1,-1))' |
# | 路徑或多邊形頂點(diǎn)數(shù) | # '((1,0),(0,1),(-1,0))' |
@-@ | 長(zhǎng)度或周長(zhǎng) | @-@ path '((0,0),(1,0))' |
@@ | 中心 | @@ circle '((0,0),10)' |
## | 離第一個(gè)操作數(shù)和第二個(gè)操作數(shù)的最近點(diǎn) | point '(0,0)' ## lseg '((2,0),(0,2))' |
<-> | 間距 | circle '((0,0),1)' <-> circle '((5,0),1)' |
&& | 重疊?(有一個(gè)共同點(diǎn)為真。) | box '((0,0),(1,1))' && box '((0,0),(2,2))' |
<< | 嚴(yán)格在左? | circle '((0,0),1)' << circle '((5,0),1)' |
>> | 嚴(yán)格在右? | circle '((5,0),1)' >> circle '((0,0),1)' |
&< | 沒有延展到右邊? | box '((0,0),(1,1))' &< box '((0,0),(2,2))' |
&> | 沒有延展到左邊? | box '((0,0),(3,3))' &> box '((0,0),(2,2))' |
<<| | 嚴(yán)格在下? | box '((0,0),(3,3))' <<| box '((3,4),(5,5))' |
|>> | 嚴(yán)格在上? | box '((3,4),(5,5))' |>> box '((0,0),(3,3))' |
&<| | 沒有延展到上面? | 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 '((0,5),1)' |
>^ | 在上面(允許接觸)? | circle '((0,5),1)' >^ circle '((0,0),1)' |
?# | 相交? | lseg '((-1,0),(1,0))' ?# box '((-2,-2),(2,2))' |
?- | 水平? | ?- lseg '((-1,0),(1,0))' |
?- | 水平對(duì)齊? | point '(1,0)' ?- point '(0,0)' |
?| | 豎直? | ?| lseg '((-1,0),(1,0))' |
?| | 豎直對(duì)齊? | point '(0,1)' ?| point '(0,0)' |
?-| | 垂直? | lseg '((0,0),(0,1))' ?-| lseg '((0,0),(1,0))' |
?|| | 平行? | lseg '((-1,0),(1,0))' ?|| lseg '((-1,2),(1,2))' |
@> | 包含? | circle '((0,0),2)' @> point '(1,1)' |
<@ | 包含或在...上? | point '(1,1)' <@ circle '((0,0),2)' |
~= | 與...相同? | polygon '((0,0),(1,1))' ~= polygon '((1,1),(0,0))' |
Note: 在PostgreSQL8.2 之前,包含操作符@>和<@被分別稱為~和@。 我們反對(duì)使用這兩個(gè)舊名字(當(dāng)前仍然可以使用),它們將來會(huì)被廢除。
Table 9-31. 幾何函數(shù)
函數(shù) | 返回類型 | 描述 | 示例 |
---|---|---|---|
area(object) |
double precision | 面積 | area(box '((0,0),(1,1))') |
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 | 長(zhǎng)度 | length(path '((-1,0),(1,0))') |
npoints(path) |
int | 點(diǎn)數(shù) | npoints(path '[(0,0),(1,1),(2,0)]') |
npoints(polygon) |
int | 點(diǎn)數(shù) | npoints(polygon '((1,1),(0,0))') |
pclose(path) |
path | 將路徑轉(zhuǎn)換為閉合 | pclose(path '[(0,0),(1,1),(2,0)]') |
popen(path) |
path | 把路徑轉(zhuǎn)換為開放 | 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 9-32. 幾何類型轉(zhuǎn)換函數(shù)
函數(shù) | 返回類型 | 描述 | 示例 |
---|---|---|---|
box(circle) |
box | 將圓轉(zhuǎn)換成矩形 | box(circle '((0,0),2.0)') |
box(point,point) |
box | 將點(diǎn)轉(zhuǎn)換成矩形 | box(point '(0,0)', point '(1,1)') |
box(polygon) |
box | 將多邊形轉(zhuǎn)換成矩形 | box(polygon '((0,0),(1,1),(2,0))') |
circle(box) |
circle | 將矩形轉(zhuǎn)換成圓 | circle(box '((0,0),(1,1))') |
circle(point,double precision) |
circle | 將圓心和半徑轉(zhuǎn)換成圓 | circle(point '(0,0)', 2.0) |
circle(polygon) |
circle | 將多邊形轉(zhuǎn)換成圓 | circle(polygon '((0,0),(1,1),(2,0))') |
lseg(box) |
lseg | 將矩形對(duì)角線轉(zhuǎn)化成線段 | lseg(box '((-1,0),(1,0))') |
lseg(point,point) |
lseg | 將點(diǎn)轉(zhuǎn)換成線段 | lseg(point '(-1,0)', point '(1,0)') |
path(polygon) |
point | 將多邊形轉(zhuǎn)換成路徑 | path(polygon '((0,0),(1,1),(2,0))') |
point (double
precision,double precision) |
point | 構(gòu)建一個(gè)點(diǎn) | point(23.4, -44.5) |
point(box) |
point | 矩形的中心 | point(box '((-1,0),(1,0))') |
point(circle) |
point | 圓心 | point(circle '((0,0),2.0)') |
point(lseg) |
point | 線段的中心 | point(lseg '((-1,0),(1,0))') |
point(polygon) |
point | 多邊形的中心 | point(polygon '((0,0),(1,1),(2,0))') |
polygon(box) |
polygon | 將矩形轉(zhuǎn)換成4個(gè)點(diǎn)多邊形 | polygon(box '((0,0),(1,1))') |
polygon(circle) |
polygon | 將圓轉(zhuǎn)換成 12個(gè)點(diǎn)多邊形 | polygon(circle '((0,0),2.0)') |
polygon(npts,circle) |
polygon | 將圓轉(zhuǎn)換成npts個(gè)點(diǎn)的多邊形 | polygon(12, circle '((0,0),2.0)') |
polygon(path) |
polygon | 將路徑轉(zhuǎn)換成多邊形 | polygon(path '((0,0),(1,1),(2,0))') |
我們可以把一個(gè) point 的兩個(gè)組成部分當(dāng)作索引分別為 0 和 1 的 數(shù)組元素進(jìn)行訪問。比如,如果t.p是一個(gè)point字段, 那么 SELECT p[0] FROM t 檢索 X 座標(biāo)而 UPDATE t SET p[1] = ... 改變 Y 座標(biāo)。 同樣,box或lseg的值可以當(dāng)作兩個(gè)point的數(shù)組值看待
area
函數(shù)可以用于box,circle,path類型。
area
函數(shù)操作path數(shù)據(jù)類型的時(shí)候,
只有在path的點(diǎn)沒有交叉的情況下才可用。
而下面的視覺等效path'((0,0),(0,1),(1,1),(1,2),(2,2),(2,1),(1,1),(1,0),(0,0))'::PATH
就可以。如果交叉和不交叉的path概念讓你胡涂,那么把上面兩個(gè)path都畫在紙上,你就明白了。