几何类型point
、box
、
lseg
、line
、path
、
polygon
和circle
有一大堆本地支持函数和操作符,如表 9.35、表 9.36和表 9.37中所示。
表 9.35. 几何操作符
操作符 描述 例子 |
---|
将第二个
|
连接两个打开的路径(如果其中一个路径是关闭的,则返回NULL)。
|
从第一个参数的每个点的坐标中减去第二个
|
将第一个参数的每个点乘上第二个point(将点视为由实部和虚部表示的复数,并执行标准的复数乘法)。
如果将第二个
|
将第一个参数的每个点除以第二个
|
计算总长度。适用于
|
计算中心点。适用于
|
返回点的数量。适用于
|
计算交点,如果没有则为NULL。适用于
|
计算两个方框的交集,如果没有则为NULL。
|
计算第二个对象上离第一个对象最近的点。适用于这些类型对:
(
|
计算对象之间的距离。适用于所有七种几何类型,适用于
|
第一个对象包含第二个对象吗? 适用于这些类型对:
(
|
第一个对象包含在第二个对象之中还是在第二个对象之上? 适用于这些类型对:
(
|
这些对象有重叠吗?(一个共同点使之为真。)
适用于
|
第一个对象完全位于第二个对象的左边吗?
适用于
|
第一个对象完全位于第二个对象的右边吗?
适用于
|
第一个对象没有延伸到第二个对象的右侧吗?
适用于
|
第一个对象没有延伸到第二个对象的左侧吗?
适用于
|
第一个对象是否确定位于第二个对象下面?
适用于
|
第一个对象是否确定位于第二个对象上面?
适用于
|
第一个对象是否没有扩展到第二个对象上面?
适用于
|
第一个对象是否没有扩展到第二个对象下面?
适用于
|
第一个对象是否位于第二个对象下面(允许边缘相切)?
|
第一个对象是否位于第二个对象上面(允许边缘相切)?
|
这些对象是否相交? 适用于这些类型对:
(
|
线是水平的?
|
点是否水平对齐(即具有相同的y坐标)?
|
线是纵向的的?
|
点是否垂直对齐(即具有相同的x坐标)?
|
线是垂直的?
|
线是平行的?
|
这些对象是相同的吗?
适用于
|
[a] “Rotating” 用这些操作符“旋转”一个盒子,只会移动它的角点:这个盒子仍然被认为有平行于轴的边。 因此,盒子的大小并没有像真正的旋转那样得到保留。 |
请注意“same as”操作符(~=
),表示point
、box
、polygon
和circle
类型的一般相等概念。
这些类型中的某些还有一个=
操作符,但是=
只比较相同的面积。
其它的标量比较操作符 (<=
等等),在这些类型可用的地方,同样比较区域。
在PostgreSQL14之前, 该点严格低于/高于比较操作符 point
<<|
point
和 point
|>>
point
分别被称为 <^
和 >^
。
这些名字仍然可以使用,但是已被弃用并且最终将被移除。
表 9.36. 几何函数
表 9.37. 几何类型转换函数
我们可以把一个point
的两个组成数字当作具有索引 0 和 1 的数组访问。例如,如果t.p
是一个point
列,那么SELECT p[0] FROM t
检索 X 座标而 UPDATE t SET p[1] = ...
改变 Y 座标。同样,box
或者lseg
类型的值可以当作两个point
值的数组值看待。