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