为获得最优性能,应始终使用像 ST_Within 或 ST_Touches 这样的方法来测试几何间的单个特定关系。但如果要测试的关系不止一个,则最好选用 ST_Relate 方法,因为该方法可同时测试多个关系。此外,希望针对谓语的不同解释进行测试时,ST_Relate 同样也是一个不错的方法。
通常情况下,ST_Relate 被用作谓语,由用户指定要测试的具体关系。但 ST_Relate 也可用于确定两个几何间的所有可能关系。
ST_Relate 通过对几何内部、边界和外部执行相交测试来评估几何间的关系。然后用包括 9 个字符的 DE-9IM(维度扩展 9 交集模型)格式的字符串来描述几何间的关系,其中字符串的每个字符都表示相交测试的结果的维度。
将 ST_Relate 用作谓语时,需要传递 DE-9IM 字符串,以反映要测试的相交结果。如果几何满足 DE-9IM 字符中所指定的条件,则 ST_Relate 将返回 1。如果不满足,则返回 0。如果任一几何或两个几何都为 NULL,则返回 NULL。
由 9 个字符组成的 DE-9IM 字符串是对成对矩阵的展平表示,该成对矩阵由内部、边界和外部间的相交测试组成。下表按测试的执行顺序(从左到右、从上到下)显示了 9 个相交测试:
g2 内部 | g2 边界 | g2 外部 | |
g1 内部 | Interior(g1) ∩ Interior(g2) |
Interior(g1) ∩ Boundary(g2) |
Interior(g1) ∩ Exterior(g2) |
g1 边界 | Boundary(g1) ∩ Interior(g2) |
Boundary(g1) ∩ Boundary(g2) |
Boundary(g1) ∩ Exterior(g2) |
g1 外部 | Exterior(g1) ∩ Interior(g2) |
Exterior(g1) ∩ Boundary(g2) |
Exterior(g1) ∩ Exterior(g2) |
指定 DE-9IM 字符串时,9 个字符中的任何一个字符都可被指定为 *、0、1、2、T、或 F。这些值表示通过相交创建的几何维数。
指定的值: | 相交测试结果应返回的值: |
---|---|
T | 以下值之一:0、1、2(与任何维度相交) |
F | -1 |
* | -1、0、1、2(任何值) |
0 | 0 |
1 | 1 |
2 | 2 |
假设您想用 ST_Relate 方法和自定义 DE-9IM 字符串作为 "within" 谓语来测试某一几何是否位于另一几何中:
SELECT new ST_Polygon('Polygon(( 2 3, 8 3, 4 8, 2 3 ))').ST_Relate( new ST_Polygon('Polygon((-3 3, 3 3, 3 6, -3 6, -3 3))'), 'T*F**F***' ); |
这等同于让 ST_Relate 在执行相交测试时寻找以下条件:
g2 内部 | g2 边界 | g2 外部 | |
g1 内部 | 以下值之一: 0, 1, 2 | 以下值之一: 0, 1, 2, -1 | -1 |
g1 边界 | 以下值之一: 0, 1, 2, -1 | 以下值之一: 0, 1, 2, -1 | -1 |
g1 外部 | 以下值之一: 0, 1, 2, -1 | 以下值之一: 0, 1, 2, -1 | 以下值之一: 0, 1, 2, -1 |
但执行查询时,ST_Relate 将返回 0,表示第一个几何不在第二个几何中。
要查看两个几何并将其外观与所测试的关系进行比较,请在 Interactive SQL 空间查看器([工具] » [空间查看器])中执行以下语句:
SELECT NEW ST_Polygon('Polygon(( 2 3, 8 3, 4 8, 2 3 ))') UNION ALL SELECT NEW ST_Polygon('Polygon((-3 3, 3 3, 3 6, -3 6, -3 3))'); |
将 ST_Relate 用作非谓语将返回两个几何间的完整关系。
例如,假设您有两个与前一示例中所使用的几何完全相同的几何,而且您想知道这两个几何之间的关系。那么,您应该在 Interactive SQL 中执行以下语句以返回定义这两个几何间关系的 DE-9IM 字符串。
SELECT new ST_Polygon('Polygon(( 2 3, 8 3, 4 8, 2 3 ))').ST_Relate(new ST_Polygon('Polygon((-3 3, 3 3, 3 6, -3 6, -3 3))')); |
ST_Relate 返回的 DE-9IM 字符串为 [212111212
]。
该值的矩阵视图表明两个几何间有多个相交点:
g2 内部 | g2 边界 | g2 外部 | |
g1 内部 | 2 | 1 | 2 |
g1 边界 | 1 | 1 | 1 |
g1 外部 | 2 | 1 | 2 |
![]() |
使用DocCommentXchange讨论此页。
|
版权 © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |