名称

ST_Touches — 测试两个几何体是否至少有一个公共点,但其内部不相交

语法

boolean ST_Touches(geometry A, geometry B);

描述

如果 A 和 B 相交,但其内部不相交,则返回 TRUE。等效地,A 和 B 至少有一个公共点,且公共点位于至少一个边界中。对于点/点输入,关系始终为 FALSE,因为点没有边界。

用数学术语来说:ST_Touches(A, B) ⇔ (Int(A) ⋂ Int(B) ≠ ∅) ∧ (A ⋂ B ≠ ∅)

如果两个几何体的 DE-9IM 交集矩阵与以下之一匹配,则此关系成立

  • FT*******

  • F**T*****

  • F***T****

[Note]

此函数自动包含一个边界框比较,该比较利用几何体上可用的任何空间索引。

若要避免使用索引,请改用 _ST_Touches

[Important]

增强:3.0.0 启用对 GEOMETRYCOLLECTION 的支持

此方法实现了 OGC 简单要素 SQL 1.1 实施规范。

s2.1.1.2 // s2.1.13.3

此方法实现了 SQL/MM 规范。

SQL-MM 3: 5.1.28

示例

在以下示例中,ST_Touches 谓词返回 TRUE

POLYGON / POLYGON

POLYGON / POLYGON

POLYGON / LINESTRING

LINESTRING / LINESTRING

LINESTRING / LINESTRING

POLYGON / POINT

SELECT ST_Touches('LINESTRING(0 0, 1 1, 0 2)'::geometry, 'POINT(1 1)'::geometry);
 st_touches
------------
 f
(1 row)

SELECT ST_Touches('LINESTRING(0 0, 1 1, 0 2)'::geometry, 'POINT(0 2)'::geometry);
 st_touches
------------
 t
(1 row)