几何类型
point、
box、
lseg、
line、
path、
polygon 和
circle
拥有大量的原生支持函数和操作符,
展示在
Table 9.36、
Table 9.37
和
Table 9.38
中。
Table 9.36. 几何操作符
操作符 说明 示例 |
|---|
把第二个
|
连接两条开放路径 (如果任一路径是封闭的, 则返回 NULL)。
|
从第一个参数的每个点的坐标中减去第二个
|
把第一个参数的每个点乘以第二个
|
把第一个参数的每个点除以第二个
|
计算总长度。
可用于
|
计算中心点。
可用于
|
返回点的数量。
可用于
|
计算交点,
如果没有则返回 NULL。
可用于
|
计算两个盒子的交集, 如果没有则返回 NULL。
|
计算第二个对象上距第一个对象最近的点。
可用于以下这些类型对:
(
|
计算对象之间的距离。
可用于全部七种几何类型、
|
第一个对象是否包含第二个?
可用于以下这些类型对:
(
|
第一个对象是否被包含在第二个之内或之上?
可用于以下这些类型对:
(
|
这些对象是否重叠?
(有一个公共点就为真。)
可用于
|
第一个对象是否严格位于第二个的左边?
可用于
|
第一个对象是否严格位于第二个的右边?
可用于
|
第一个对象是否没有延伸到第二个对象的右边?
可用于
|
第一个对象是否没有延伸到第二个对象的左边?
可用于
|
第一个对象是否严格位于第二个的下方?
可用于
|
第一个对象是否严格位于第二个的上方?
可用于
|
第一个对象是否没有延伸到第二个的上方?
可用于
|
第一个对象是否没有延伸到第二个的下方?
可用于
|
第一个对象是否位于第二个的下方 (允许边界相触)?
|
第一个对象是否位于第二个的上方 (允许边界相触)?
|
这些对象是否相交?
可用于以下这些类型对:
(
|
该直线是否水平?
|
这些点是否水平对齐 (即具有相同的 y 坐标)?
|
该直线是否竖直?
|
这些点是否垂直对齐 (即具有相同的 x 坐标)?
|
两条直线是否垂直?
|
两条直线是否平行?
|
这些对象是否相同?
可用于
|
[a] “旋转”一个 盒子只会移动它的角点: 盒子仍然被视为具有平行于坐标轴的边。 因此盒子的尺寸不会被保留, 而真正的旋转会保留它。 |
注意,
“相同”操作符
~=
代表
point、
box、
polygon 和
circle
类型惯常的相等概念。
某些几何类型还有一个
=
操作符,
但
=
只比较
面积是否相等。
在这些类型可用的其他标量比较操作符
(<=
等)中,
比较的同样是面积。
在
PostgreSQL 14
之前,
点严格位于下方/上方的比较操作符
point
<<|
point
和
point
|>>
point
分别被叫做
<^ 和
>^。
这些名字仍然可用,
但已被弃用,
并且最终会被移除。
Table 9.37. 几何函数
Table 9.38. 几何类型转换函数
可以像访问一个索引为 0 和 1
的数组那样访问
point
的两个分量数字。
例如,如果
t.p
是一个
point
列,
那么
SELECT p[0] FROM t
检索 X
坐标,
而
UPDATE t SET p[1] = ...
改变 Y
坐标。
以同样的方式,
一个
box 或
lseg
类型的值可以被视为由两个
point
值组成的数组。