名稱

ST_Covers — 測試 B 的每個點是否都位於 A 內

概要

boolean ST_Covers(geometry geomA, geometry geomB);

boolean ST_Covers(geography geogpolyA, geography geogpointB);

描述

如果幾何/地理 B 中的每個點都位於幾何/地理 A 的內部(即,與其內部或邊界相交),則返回 true。等效地,測試 B 中沒有點位於 A 的外部。

用數學術語來說:ST_Covers(A, B) ⇔ A ⋂ B = B

ST_Covers 是 ST_CoveredBy 的相反函數。因此,ST_Covers(A,B) = ST_CoveredBy(B,A)

通常,應該使用此函數代替 ST_Contains,因為它具有更簡單的定義,沒有「幾何圖形不包含其邊界」的怪異之處。

[Note]

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

[Important]

增強功能:3.0.0 啟用對 GEOMETRYCOLLECTION 的支援

[Important]

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

由 GEOS 模組執行

增強功能:2.4.0 新增了對 geography 類型中多邊形包含多邊形和線包含多邊形的支援

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

可用性:1.5 - 引入了對 geography 的支援。

可用性:1.2.2

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

非 OGC 標準,但 Oracle 也有此功能。

範例

幾何範例

  --a circle covering a circle
SELECT ST_Covers(smallc,smallc) As smallinsmall,
  ST_Covers(smallc, bigc) As smallcoversbig,
  ST_Covers(bigc, ST_ExteriorRing(bigc)) As bigcoversexterior,
  ST_Contains(bigc, ST_ExteriorRing(bigc)) As bigcontainsexterior
FROM (SELECT ST_Buffer(ST_GeomFromText('POINT(1 2)'), 10) As smallc,
  ST_Buffer(ST_GeomFromText('POINT(1 2)'), 20) As bigc) As foo;
  --Result
 smallinsmall | smallcoversbig | bigcoversexterior | bigcontainsexterior
--------------+----------------+-------------------+---------------------
 t            | f              | t                 | f
(1 row) 

地理範例

-- a point with a 300 meter buffer compared to a point, a point and its 10 meter buffer
SELECT ST_Covers(geog_poly, geog_pt) As poly_covers_pt,
  ST_Covers(ST_Buffer(geog_pt,10), geog_pt) As buff_10m_covers_cent
  FROM (SELECT ST_Buffer(ST_GeogFromText('SRID=4326;POINT(-99.327 31.4821)'), 300) As geog_poly,
        ST_GeogFromText('SRID=4326;POINT(-99.33 31.483)') As geog_pt ) As foo;

 poly_covers_pt | buff_10m_covers_cent
----------------+------------------
 f              | t