Name

ST_Within — 测试 A 的每个点是否都位于 B 中,并且它们的内部是否有一个共同点

Synopsis

boolean ST_Within(geometry A, geometry B);

描述

如果几何对象 A 完全包含在几何对象 B 内部(即 A 的所有点都在 B 的内部或边界上),并且 A 和 B 的内部至少有一个公共点,则返回 TRUE。等价地,A 在 B 中,当且仅当 A 的所有点都位于 B 的内部(包括边界),且 A 和 B 的内部至少有一个点重叠。

为了使此函数有意义,源几何图形必须具有相同的坐标投影,并具有相同的 SRID。

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

内部关系是自反的:每个几何体都在其自身之内。 该关系是反对称的:如果 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)

[Note]

因为内部必须有一个公共点,所以定义的一个微妙之处在于,完全位于多边形或线的边界内的线和点在几何内部。 有关更多详细信息,请参阅 OGC覆盖、包含、内部的微妙之处ST_CoveredBy 谓词提供了更具包容性的关系。

[Note]

此功能自动包括利用几何上可用的任何空间索引的边界框比较。 要避免使用索引,请使用函数 _ST_Within

它是通过GEOS模块实现的

增强:对于 2.3.0 几何图形,PIP 短路(仅限于多边形和点的快速判断)已得到增强,以支持由更少点组成的多点。 以前的版本仅支持面和点组合。

[Important]

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

[Important]

请勿将此函数用于无效的几何图形。 你会得到意想不到的结果。

注意:这是返回布尔值而不是整数的“允许”版本。

此方法实现了 SQL 1.1 的 OGC 简单功能规范。 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)