ST_Relate — 测试两个几何图形是否具有匹配相交矩阵模式的拓扑关系,或计算其相交矩阵
boolean ST_Relate(
geometry geomA, geometry geomB, text intersectionMatrixPattern)
;
text ST_Relate(
geometry geomA, geometry geomB)
;
text ST_Relate(
geometry geomA, geometry geomB, integer boundaryNodeRule)
;
这些函数允许测试和评估两个几何之间的空间(拓扑)关系,如 维度扩展的9交模型 (de-9IM)。
DE-9IM被指定为9元素矩阵,指示两个几何图形的内部、边界和外部的交点的尺寸。它由9个字符的文本字符串表示,使用符号‘F’、‘0’、‘1’、‘2’(例如 'FF1FF0102'
)。
通过将交集矩阵与 交集矩阵模式 。模式可以包括附加符号‘T’和‘*’。通用空间关系由命名函数提供 ST_Contains , ST_ContainsProperly , ST_Covers , ST_CoveredBy , ST_Crosses , ST_Disjoint , ST_Equals , ST_Intersects , ST_Overlaps , ST_Touches ,以及 ST_Within 。使用显式模式允许在一步中测试交叉点、十字等的多个条件。它还允许测试不具有命名空间关系功能的空间关系。例如,关系“Internal-Intersects”具有DE-9IM模式 T********
,它不会由任何命名谓词求值。
有关更多信息,请参阅 Section 5.1, “确定空间关系” 。
变体1: 测试两个几何图形是否根据给定的 intersectionMatrixPattern
。
![]() | |
与大多数命名空间关系谓词不同,这不会自动包括索引调用。原因是某些关系对于不相交的几何图形是正确的(例如,不相交)。如果您正在使用需要交集的关系模式,则包括 & & 索引调用。 |
![]() | |
最好使用命名关系函数(如果可用),因为它们会自动使用存在的空间索引。此外,它们可能会实现完全关联计算中不可用的性能优化。 |
变体2: 返回两个输入几何图形之间的空间关系的DE-9IM矩阵字符串。可以使用以下命令测试矩阵字符串是否与DE-9IM模式匹配 ST_RelateMatch 。
变体3: 与变体2类似,但允许指定 边界结点规则 。边界节点规则允许更精细地控制几何图形边界点是否被视为位于DE-9IM内部或边界。这个 boundaryNodeRule
代码为:1:OGC/MOD2,2:Endpoint,3:MultivalentEndpoint,4:MonovalentEndpoint。
此功能不在OGC规范中,但是隐含的。见s2.1.13.2
This method implements the OGC Simple Features
Implementation Specification for SQL 1.1. S2.1.1.2//s2.1.13.3
This method implements the SQL/MM specification. SQL-MM 3:5.1.25
由GEOS模块执行
增强:2.0.0-增加了对指定边界节点规则的支持。
![]() | |
增强:已启用3.0.0支持 |
使用布尔值函数测试空间关系。
SELECT ST_Relate('POINT(1 2)', ST_Buffer( 'POINT(1 2)', 2), '0FFFFF212'); st_relate ----------- t SELECT ST_Relate(POINT(1 2)', ST_Buffer( 'POINT(1 2)', 2), '*FF*FF212'); st_relate ----------- t
测试自定义空间关系模式作为查询条件,使用 &&
要启用空间索引,请执行以下操作。
-- Find compounds that properly intersect (not just touch) a poly (Interior Intersects) SELECT c.* , p.name As poly_name FROM polys AS p INNER JOIN compounds As c ON c.geom && p.geom AND ST_Relate(p.geom, c.geom,'T********');
计算空间关系的交集矩阵。
SELECT ST_Relate( 'POINT(1 2)', ST_Buffer( 'POINT(1 2)', 2)); st_relate ----------- 0FFFFF212 SELECT ST_Relate( 'LINESTRING(1 2, 3 4)', 'LINESTRING(5 6, 7 8)' ); st_relate ----------- FF1FF0102