point
、box
、lseg
、line
、path
、polygon
和 circle
几何类型具有大量的本机支持函数和运算符,请参见 表 9.36、表 9.37 和 表 9.38。
表 9.36 几何运算符
运算符 说明 示例 |
---|
将第二个
|
连接两个开路径(如果任一路径闭合,则返回 NULL)。
|
将第二个
|
将第一个参数中每个点乘以第二个
|
将首个参数的每个点除以第二个
|
计算总长度。适用于
|
计算中心点。适用于
|
返回点的数量。适用于
|
计算交点,如果没有交点则为 NULL。适用于
|
计算两个矩形的交集,如果没有交集则为 NULL。
|
计算第一个对象到第二个对象的最接近点。适用于以下类型对:(
|
计算对象之间的距离。适用于所有七种几何类型,适用于
|
第一个对象是否包含第二个对象?适用于以下类型对:(
|
第一个对象是否包含在或位于第二个对象上?适用于以下类型对:(
|
这些对象是否重叠?(一个公共点可以使其为真。)适用于
|
第一个对象是否严格在第二个对象的左边?适用于
|
第一个对象是否严格在第二个对象的右边?适用于
|
第一个对象的右侧是否不与第二个对象扩展?适用于
|
第一个对象的左侧不与第二个对象扩展?适用于
|
第一个对象是否严格在第二个对象的下方?适用于
|
第一个对象是否严格在第二个对象的上面?适用于
|
第一个对象未延伸到第二个对象的上面?适用于
|
第一个对象未延伸到第二个对象的下面?适用于
|
第一个对象位于第二个对象下面(允许边缘接触)?
|
第一个对象位于第二个对象上面(允许边缘接触)?
|
这些对象相交?适用于以下类型的组合:(
|
线段是否水平?
|
点是否在同一水平线上(即具有相同的 y 坐标)?
|
线段是否垂直?
|
点是否在同一垂直线上(即具有相同的 x 坐标)?
|
线段是否垂直?
|
线段是否平行?
|
这些对象是否相同?可用于
|
[a] “旋转” 一个盒子时,这些运算符只会移动其角点:该盒子仍被视为其边与轴平行。因此,该盒子的尺寸没有保留下来,而真正的旋转会保留尺寸。 |
请注意,“相同”运算符 ~=
代表 point
、box
、polygon
和 circle
类型的通常相等概念。其中一些几何类型还有 =
运算符,但 =
仅用于比较相等 区域。还可用于这些类型的其他标量比较运算符(<=
等),以同样比较区域。
在 PostgreSQL 14 之前,该点的严格低于/高于比较运算符 point
<<|
point
和 point
|>>
point
分别称为 <^
和 >^
。这些名称仍然可用,但已被弃用并且最终将被删除。
表 9.37 几何函数
表 9.38. 几何类型转换函数
可以像将点作为带有索引 0 和 1 的数组一样访问 point
的两个组成元素编号。例如,如果 t.p
是 point
列,则 SELECT p[0] FROM t
会检索 X 坐标,并且 UPDATE t SET p[1] = ...
会更改 Y 坐标。同样,类型为 box
或 lseg
的值可以看作为两个 point
值的数组。