名前

ST_Covers — Bの全ての点がA内にあるかをテストします。

概要

boolean ST_Covers(geometry geomA, geometry geomB);

boolean ST_Covers(geography geogpolyA, geography geogpointB);

説明

ジオメトリ/ジオグラフィBの全てのポイントがジオメトリ/ジオグラフィAの内側にある (内部または境界とインタセクトする)場合にTRUEを返します。Aの外部にBの点が無いことと等価です。

数学用語では: ST_Covers(A, B) ⇔ A ⋂ B = B

ST_Covers はST_CoveredByの逆です。ST_Covers(A,B) = ST_CoveredBy(B,A)となります。

一般に、この関数はST_Containsの代わりに使われるべきものです。定義が「ジオメトリがその境界を含まない」という奇妙なものになっていないからです。

[注記]

この関数を実行すると、対象ジオメトリにおいて使用できるインデックスを使用したバウンディングボックスによる比較が自動的に行われます。 インデックスの使用を避けるには_ST_Covers関数を使います。

Enhanced: 3.0.0 GEOMETRYCOLLECTIONへの対応が可能となりました

[重要]

この関数を不正なジオメトリで呼ばないでください。予期しない結果が返されます。

GEOSモジュールで実現しています。

Enhanced: 2.4.0 ジオグラフィ型を使う形式においてポリゴンの中のポリゴンとポリゴンの中のラインストリングへの対応を追加

Enhanced: 2.3.0 ジオメトリについて、PIP short-circuit (ポリゴンとポイントに限定した高速判定)を少ないポイントからなるマルチポイントに対応することができるよう拡張しました。以前の版ではポリゴンとポイントの組み合わせにだけ対応していました。

Availability: 1.5 - ジオグラフィ対応が導入されました。

Availability: 1.2.2

ご注意: これは論理値を返して整数を返さないのが「許される」版です。

これはOGC標準と違いますがOracleは持っています。

ジオメトリの例

この例ではある円がもう一つの円を覆っているかどうかをテストします。

Code
WITH circles AS (
  SELECT ST_Buffer(center, 10) AS smallc,
         ST_Buffer(center, 20) AS bigc
  FROM (SELECT 'POINT(1 2)'::geometry AS center) AS p
)
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 circles;
出力:
smallinsmall | smallcoversbig | bigcoversexterior | bigcontainsexterior
--------------+----------------+-------------------+---------------------
 t            | f              | t                 | f
(1 row) 
Figure
Geometry figure for visual-st-covers-01

Geography example

この例ではあるポイントと、このポイントとは別のポイントの300mバッファーと比較して、このポイントの10mバッファーとも比較します。

Code
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('SRID=4326;POINT(-99.327 31.4821)'::geography, 300) As geog_poly,
        'SRID=4326;POINT(-99.33 31.483)'::geography As geog_pt ) As foo;
出力:
poly_covers_pt | buff_10m_covers_cent
----------------+------------------
 f              | t