ST_Within — 测试 A 的每个点是否都位于 B 内,并且它们的内部有公共点
boolean ST_Within(
geometry A, geometry B)
;
如果几何图形 A 在几何图形 B 内,则返回 TRUE。 当且仅当 A 的所有点都位于 B 的内部(即内部或边界)时(或者等效地,A 的任何点都不在 B 的外部),并且 A 和 B 的内部至少有一个公共点时,A 才在 B 内。
为了使此函数有意义,源几何图形必须具有相同的坐标投影,并且具有相同的 SRID。
用数学术语表示:ST_Within(A, B) ⇔ (A ⋂ B = A) ∧ (Int(A) ⋂ Int(B) ≠ ∅)
within 关系是自反的:每个几何图形都在其自身内部。该关系是反对称的:如果 ST_Within(A,B) = true
且 ST_Within(B,A) = true
,则两个几何图形必须在拓扑上相等 (ST_Equals(A,B) = true
)。
ST_Within 是 ST_Contains 的逆关系。 因此,ST_Within(A,B) = ST_Contains(B,A)
。
由于内部必须有公共点,因此该定义的一个微妙之处是,完全位于多边形或线的边界内的线和点 不 在该几何图形内。有关更多详细信息,请参阅 OGC Covers、Contains、Within 的微妙之处。 ST_CoveredBy 谓词提供了更具包容性的关系。 |
此函数会自动包含边界框比较,该比较利用几何图形上可用的任何空间索引。 要避免使用索引,请使用函数 |
由 GEOS 模块执行
增强功能:2.3.0 增强了 PIP 短路功能,几何图形扩展为支持具有少量点的 MultiPoint。 以前的版本仅支持点在多边形中。
增强功能:3.0.0 启用对 |
请勿将此函数与无效的几何图形一起使用。 你会得到意想不到的结果。 |
注意:这是返回布尔值而不是整数的“允许”版本。
此方法实现了 OGC 简单要素 SQL 实现规范 1.1。 s2.1.1.2 // s2.1.13.3 - a.Relate(b, 'T*F**F***')
此方法实现了 SQL/MM 规范。 SQL-MM 3: 5.1.30
--a circle within a circle SELECT ST_Within(smallc,smallc) As smallinsmall, ST_Within(smallc, bigc) As smallinbig, ST_Within(bigc,smallc) As biginsmall, ST_Within(ST_Union(smallc, bigc), bigc) as unioninbig, ST_Within(bigc, ST_Union(smallc, bigc)) as biginunion, ST_Equals(bigc, ST_Union(smallc, bigc)) as bigisunion FROM ( SELECT ST_Buffer(ST_GeomFromText('POINT(50 50)'), 20) As smallc, ST_Buffer(ST_GeomFromText('POINT(50 50)'), 40) As bigc) As foo; --Result smallinsmall | smallinbig | biginsmall | unioninbig | biginunion | bigisunion --------------+------------+------------+------------+------------+------------ t | t | f | t | t | t (1 row)