↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

支持中的版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发中的版本: 19 / 20devel
已结束支持的版本: 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 已结束支持。 请参阅 当前版本手册.

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矩形框对角线转换为 lseglseg(box '((-1,0),(1,0))')
lseg(point, point)lseg由点构造 lseglseg(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)polygon4 个点的多边形polygon(box '((0,0),(1,1))')
polygon(circle)polygon12 个点的多边形polygon(circle '((0,0),2.0)')
polygon(npts, circle)polygonnpts 个点的多边形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 组成的数组对待。

报告文档问题

阅读 上游文档. 反馈更正前请先核对 当前版本手册.