Name

ST_Covers — BのポイントがAの外部に存在しないかどうかをテストします。

Synopsis

boolean ST_Covers(geometry geomA, geometry geomB);

boolean ST_Covers(geography geogpolyA, geography geogpointB);

説明

ジオメトリ/ジオグラフィBのポイントがジオメトリ/ジオグラフィAの外側に存在しない場合にはTRUEを返します。ジオメトリBの全てのポイントがジオメトリAの内側にある (内部または境界とインタセクトする)かを見るのと同じです。

[Note]

This function automatically includes a bounding box comparison that makes use of any spatial indexes that are available on the geometries. インデックスの使用を避けるには_ST_Covers関数を使います。

[Important]

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

[Important]

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

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

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

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

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

Availability: 1.2.2

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

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

ジオメトリの例

-- 円を覆う円
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;
  -- 結果
 smallinsmall | smallcoversbig | bigcoversexterior | bigcontainsexterior
--------------+----------------+-------------------+---------------------
 t            | f              | t                 | f
(1 row) 

ジオグラフィの例

-- 300mバッファを持つポイントとポイントとの比較と、10メートルバッファを持つポイントとポイントとの比較
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
    

関連情報

ST_Contains, ST_CoveredBy, ST_Within