名前

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 は持っています。

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

コード
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_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 exteriorwithinbig
FROM circles;
出力
smallinsmall | smallcoveredbybig | exteriorcoveredbybig | exteriorwithinbig
--------------+-------------------+----------------------+------------------
 t            | t                 | t                    | f
(1 row) 
Geometry figure for visual-st-coveredby-01