Name

ST_Relate — 测试两个几何图形是否具有匹配相交矩阵模式的拓扑关系,或计算其相交矩阵

Synopsis

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_ContainsST_ContainsProperlyST_CoversST_CoveredByST_CrossesST_DisjointST_EqualsST_IntersectsST_OverlapsST_Touches ,以及 ST_Within 。使用显式模式允许在一步中测试交叉点、十字等的多个条件。它还允许测试不具有命名空间关系功能的空间关系。例如,关系“Internal-Intersects”具有DE-9IM模式 T******** ,它不会由任何命名谓词求值。

有关更多信息,请参阅 Section 5.1, “确定空间关系”

变体1: 测试两个几何图形是否根据给定的 intersectionMatrixPattern

[Note]

与大多数命名空间关系谓词不同,这不会自动包括索引调用。原因是某些关系对于不相交的几何图形是正确的(例如,不相交)。如果您正在使用需要交集的关系模式,则包括 & & 索引调用。

[Note]

最好使用命名关系函数(如果可用),因为它们会自动使用存在的空间索引。此外,它们可能会实现完全关联计算中不可用的性能优化。

变体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-增加了对指定边界节点规则的支持。

[Important]

增强:已启用3.0.0支持 GEOMETRYCOLLECTION

示例

使用布尔值函数测试空间关系。

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

另请参阅

Section 5.1, “确定空间关系”, ST_RelateMatch, ST_Contains, ST_ContainsProperly, ST_Covers, ST_CoveredBy, ST_Crosses, ST_Disjoint, ST_Equals, ST_Intersects, ST_Overlaps, ST_Touches, ST_Within