名稱

ST_Within — 測試幾何 A 的每個點是否都位於 B 內,且它們的內部有共同的點

概要

boolean ST_Within(geometry A, geometry B);

描述

如果幾何 A 位於幾何 B 內,則返回 TRUE。A 位於 B 內若且唯若 A 的所有點都位於 B 內部(即在 B 的內部或邊界內)(或者等價地,A 沒有任何點位於 B 的外部),且 A 和 B 的內部至少有一個共同點。

為了使此函數有意義,源幾何圖形必須具有相同的坐標投影,具有相同的 SRID。

用數學術語來說:ST_Within(A, B) ⇔ (A ⋂ B = A) ∧ (Int(A) ⋂ Int(B) ≠ ∅)

包含關係是自反的:每個幾何圖形都在其自身內。此關係是不對稱的:如果 ST_Within(A,B) = trueST_Within(B,A) = true,則這兩個幾何圖形必須在拓撲上相等(ST_Equals(A,B) = true)。

ST_Within 是 ST_Contains 的反向關係。因此,ST_Within(A,B) = ST_Contains(B,A)

[Note]

由於內部必須具有一個共同點,因此定義的一個細微之處在於,完全位於多邊形或線邊界內的線和點 位於幾何圖形內。有關詳細資訊,請參閱 OGC Covers, Contains, Within 的細微之處ST_CoveredBy 謂詞提供更具包容性的關係。

[Note]

此函數自動包含邊界框比較,該比較會利用幾何圖形上任何可用的空間索引。要避免使用索引,請使用函數 _ST_Within

由 GEOS 模組執行

增強:2.3.0 增強了 PIP 短路功能,使幾何圖形擴展支援具有少量點的 MultiPoints。先前版本僅支援多邊形中的點。

[Important]

增強:3.0.0 啟用對 GEOMETRYCOLLECTION 的支援

[Important]

請勿將此函數與無效的幾何圖形一起使用。您會得到意料之外的結果。

注意:這是返回布林值而非整數的「允許」版本。

此方法實作了 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)