名前

ST_Covers — ジオメトリBにジオメトリAの外となるポイントが無い場合には、1(TRUE)を返します。

概要

boolean ST_Covers(geometry geomA, geometry geomB);

boolean ST_Covers(geography geogpolyA, geography geogpointB);

説明

ジオメトリ/ジオグラフィBにジオメトリ/ジオグラフィAの外となるポイントが無い場合には、1(TRUE)を返します。

GEOSモジュールによって実現しています。

[重要]

GEOMETRYCOLLECTIONを引数にして呼ばないでください。

[重要]

ジオグラフィではAにポリゴン、Bにポイントがある場合のみ対応します。

[重要]

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

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

初出: 1.2.2 - GEOS 3.0以上が必要です。

初出: 1.5 - ジオグラフィが導入されました。

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

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

直感的に分かりにくいST_ContainsとST_Withinの微妙な違いがあります。詳細については、Subtleties of OGC Covers, Contains, Withinをご覧ください。

ジオメトリの例

	-- 円をカバーする円
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)	

ジオグラフィの例

-- ポイントと他のポイントから300メートルのバッファとの比較と
-- ポイントとそのポイントから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