名前

ST_CoveredBy — Aの全てのポイントがB内にあるかをテストします。

概要

boolean ST_CoveredBy(geometry geomA, geometry geomB);

boolean ST_CoveredBy(geography geogA, geography geogB);

説明

ジオメトリ/ジオグラフィAの全ての点がジオメトリ/ジオグラフィBの内側にある (つまりBの境界か内部とインタセクトする)場合にTRUEを返します。AにBの外側にある (Bの外部にある)点が無いかどうかをテストする、と言い換えられます。

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

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

一般に、この関数はST_Withinの代わりに使います。「境界がジオメトリの内側に無い」という奇妙な言葉が定義に含まれないためです。

[注記]

この関数の呼び出しによって、ジオメトリで使用可能なインデックスを使用するバウンディングボックスの比較が自動的に行われます。

インデックスの使用を避けるには_ST_CoveredBy関数を使います。

[重要]

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

[重要]

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

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

Availability: 1.2.2

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

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

--a circle coveredby a circle
SELECT ST_CoveredBy(smallc,smallc) As smallinsmall,
  ST_CoveredBy(smallc, bigc) As smallcoveredbybig,
  ST_CoveredBy(ST_ExteriorRing(bigc), bigc) As exteriorcoveredbybig,
  ST_Within(ST_ExteriorRing(bigc),bigc) As exeriorwithinbig
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 | smallcoveredbybig | exteriorcoveredbybig | exeriorwithinbig
--------------+-------------------+----------------------+------------------
 t            | t                 | t                    | f
(1 row) 

関連情報

ST_Contains, ST_Covers, ST_ExteriorRing, ST_Within