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) = 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 短路功能,使幾何圖形擴展支援具有少量點的 MultiPoints。先前版本僅支援多邊形中的點。
![]() |
|
增強: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)