名称

ST_Crosses — 测试两个几何体是否有一些(但不是全部)内部点是公共的

语法

boolean ST_Crosses(geometry g1, geometry g2);

描述

比较两个几何体对象,如果它们的交集“空间交叉”,则返回 true;也就是说,这些几何体有一些(但不是全部)内部点是公共的。这些几何体的内部交集必须是非空的,并且维度必须小于两个输入几何体的最大维度,并且这两个几何体的交集不能等于任何一个几何体。否则,它将返回 false。交叉关系是对称且非自反的。

用数学术语来说:ST_Crosses(A, B) ⇔ (dim( Int(A) ⋂ Int(B) ) < max( dim( Int(A) ), dim( Int(B) ) )) ∧ (A ⋂ B ≠ A) ∧ (A ⋂ B ≠ B)

如果几何体的 DE-9IM 交集矩阵匹配,则它们会交叉

  • T*T****** 适用于点/线、点/面和线/面情况

  • T*****T** 适用于线/点、面/点和面/线情况

  • 0******** 适用于线/线情况

  • 对于点/点和面/面情况,结果为 false

[Note]

OpenGIS 简单要素规范仅针对点/线、点/面、线/线和线/面情况定义此谓词。JTS/GEOS 将定义扩展到也适用于线/点、面/点和面/线情况。这使得关系对称。

[Note]

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

[Important]

增强:3.0.0 启用了对 GEOMETRYCOLLECTION 的支持

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

s2.1.13.3

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

SQL-MM 3: 5.1.29

示例

以下所有情况都会返回 true

MULTIPOINT / LINESTRING

MULTIPOINT / POLYGON

LINESTRING / POLYGON

LINESTRING / LINESTRING

考虑用户有两个表的情况:道路表和高速公路表。

CREATE TABLE roads (
  id serial NOT NULL,
  geom geometry,
  CONSTRAINT roads_pkey PRIMARY KEY (road_id)
);

CREATE TABLE highways (
  id serial NOT NULL,
  the_gem geometry,
  CONSTRAINT roads_pkey PRIMARY KEY (road_id)
);

若要确定穿过高速公路的道路列表,请使用类似于

SELECT roads.id
FROM roads, highways
WHERE ST_Crosses(roads.geom, highways.geom);

另请参阅

ST_ContainsST_Overlaps