ST_Geometry 的关系函数
关系函数使用谓词来测试不同类型的空间关系。测试通过比较以下各项的关系达到此目的:
- 几何的外部 (E),即未被几何占用的所有空间
- 几何的内部 (I),即几何所占空间
- 几何的边界 (B),即几何内部和外部的分界
谓词用于测试关系。如果比较结果满足函数的条件,则谓词返回 1 或 t (TRUE);否则,返回 0 或 f (FALSE)。用于测试以确定空间关系的谓词对可具有不同类型或维度的几何对进行比较。
谓词可比较已提交几何的 x 和 y 坐标。将忽略 z 坐标和测量值(如果存在)。可将具有 z 坐标或测量值的几何与不具有 z 坐标或测量值的几何进行比较。
Clementini 等人开发的维扩展九交模型 (DE-9IM) 在维度上扩展了 Egenhofer 和 Herring 的九交模型。DE-9IM 这种数学方法定义了不同类型和维度的几何之间的成对空间关系。此模型将所有类型的几何之间的空间关系表示为其内部、边界和外部的成对交集,还考虑到生成的交集的维度。
假设有几何 a 和 b,I(a)、B(a) 和 E(a) 分别表示 a 的内部、边界和外部,I(b)、B(b) 和 E(b) 分别表示 b 的内部、边界和外部。I(a)、B(a) 和 E(a) 分别与 I(b)、B(b) 和 E(b) 的交集生成了一个 3×3 矩阵。每个交集可生成不同维度的几何。例如,两个面的边界的交集可由点和线串组成,在这种情况下,dim(维度)函数将返回最大维度 1。
dim 函数返回值 -1、0、1 或 2。值 -1 对应于未找到交集时返回的空集或 dim(Ø)。
内部 | 边界 | 外部 | |
---|---|---|---|
内部 |
dim(I(a) 与 I(b) 的交集) |
dim(I(a) 与 B(b) 的交集) |
dim(I(a) 与 E(b) 的交集) |
边界 |
dim(B(a) 与 I(b) 的交集) |
dim(B(a) 与 B(b) 的交集) |
dim(B(a) 与 E(b) 的交集) |
外部 |
dim(E(a) 与 I(b) 的交集) |
dim(E(a) 与 B(b) 的交集) |
dim(E(a) 与 E(b) 的交集) |
可通过将谓词结果与表示 DE-9IM 可接受值的模式矩阵进行比较来理解或验证空间关系谓词的结果。
模式矩阵包含每个交集矩阵单元的可接受值。可用的模式值如下:
T - 必须存在交集;dim = 0、1 或 2
F - 不得存在交集;dim = -1
* - 交集是否存在无关紧要;dim = -1、0、1 或 2
0 - 交集必须存在且最大维度必须为 0;dim = 0
1 - 交集必须存在且最大维度必须为 1;dim = 1
2 - 交集必须存在且最大维度必须为 2;dim = 2
每个谓词至少包含一个模式矩阵,但是有些谓词需要多个模式矩阵来描述各种几何类型组合的关系。
针对几何组合的 ST_Within 谓词的模式矩阵具有以下形式:
b |
||||
内部 |
边界 |
外部 |
||
内部 |
T |
* |
F |
|
a |
边界 |
* |
* |
F |
外部 |
* |
* |
* |
简而言之,如果两个几何的内部相交,且 a 的内部和边界与 b 的外部不相交,则 ST_Within 谓词返回 TRUE。所有其他条件均无关紧要。
以下部分介绍用于空间关系的不同谓词。在这些部分的插图中,列出的第一个输入几何以黑色显示,第二个输入几何以橙色描绘。
ST_Contains
如果第一个几何完全包含第二个几何,则 ST_Contains 返回 1 或 t (TRUE)。ST_Contains 谓词返回的结果与 ST_Within 谓词的结果完全相反。

ST_Contains 谓词的模式矩阵规定两个几何的内部必须相交,并且次要几何(几何 b)的内部和边界不得与主要几何(几何 a)的外部相交。
b |
||||
内部 |
边界 |
外部 |
||
内部 |
T |
* |
* |
|
a |
边界 |
* |
*</ |