↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
测试与开发版本: 19 / devel
不受支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2 / 7.1
历史版本PostgreSQL 7.4 已于 2010 年 10 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本。

9.9. 几何函数和操作符 #

几何类型point、box、 lseg、line、path、 polygon和circle有大量内置支持函数和操作符,如表 9.28、表 9.29和表 9.30中所示。

表 9.28. 几何操作符

操作符 描述 示例
+ 平移 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))'
@-@ 长度或周长 @-@ path '((0,0),(1,0))'
@@ 中心 @@ circle '((0,0),10)'
## 第二个操作数上距离第一个操作数最近的点 point '(0,0)' ## lseg '((2,0),(0,2))'
<-> 两者之间的距离 circle '((0,0),1)' <-> circle '((5,0),1)'
&& 是否重叠?(有一个公共点即为真。) 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 '((5,0),1)' >> circle '((0,0),1)'
<^ 是否位于下方? 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))'
?- 是否水平对齐? point '(1,0)' ?- point '(0,0)'
?| 是否竖直? ?| lseg '((-1,0),(1,0))'
?| 是否竖直对齐? 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))'

表 9.29. 几何函数

函数 返回类型 描述 示例
area(object) double precision 面积 area(box '((0,0),(1,1))')
box_intersect(box, box) box 交集矩形框 box_intersect(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))')

表 9.30. 几何类型转换函数

函数 返回类型 描述 示例
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(box '((-1,0),(1,0))')
lseg(point, point) 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 交集 point(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))')

可以把一个point当作下标为 0 和 1 的数组,访问它的两个数值分量。例如,如果t.p是一个point列,那么SELECT p[0] FROM t检索 X 坐标而 UPDATE t SET p[1] = ...改变 Y 坐标。同样,box或者lseg类型的值可以当作两个point值组成的数组看待。

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。