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

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.3 已于 2007 年 11 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本。

6.9. 几何函数和操作符 #

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

表 6.20. 几何操作符

操作符 描述 用法
+ 平移 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))'

表 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))')

表 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 交集 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))')

可以像访问下标为 0、1 的数组那样访问一个 point 的两个组成数字。例如,如果 t.p 是一个 point 列,那么 SELECT p[0] FROM t 检索 X 坐标; UPDATE t SET p[1] = ... 修改 Y 坐标。 以同样的方式,box 或 lseg 可以被当作 由两个 point 组成的数组对待。

提交更正

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