名前

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

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

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_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) 
Figure
Geometry figure for visual-st-coveredby-01