ST_Covers — Bの全ての点がA内にあるかをテストします。
boolean ST_Covers(
geometry geomA, geometry geomB)
;
boolean ST_Covers(
geography geogpolyA, geography geogpointB)
;
ジオメトリ/ジオグラフィBの全てのポイントがジオメトリ/ジオグラフィAの内側にある (内部または境界とインタセクトする)場合にTRUE
を返します。Aの外部にBの点が無いことと等価です。
数学用語では: ST_Covers(A, B) ⇔ A ⋂ B = B
ST_Covers はST_CoveredByの逆です。ST_Covers(A,B) = ST_CoveredBy(B,A)
となります。
一般に、この関数はST_Containsの代わりに使われるべきものです。定義が「ジオメトリがその境界を含まない」という奇妙なものになっていないからです。
この関数の呼び出しによって、ジオメトリで使用可能なインデックスを使用するバウンディングボックスの比較が自動的に行われます。 インデックスの使用を避けるには |
Enhanced: 3.0.0 |
この関数を不正なジオメトリで呼ばないでください。予期しない結果が返されます。 |
GEOSモジュールで実現しています。
Enhanced: 2.4.0 ジオグラフィ型を使う形式においてポリゴンの中のポリゴンとポリゴンの中のラインストリングへの対応を追加
Enhanced: 2.3.0 ジオメトリについて、PIP short-circuit (ポリゴンとポイントに限定した高速判定)を少ないポイントからなるマルチポイントに対応することができるよう拡張しました。以前の版ではポリゴンとポイントの組み合わせにだけ対応していました。
Availability: 1.5 - ジオグラフィ対応が導入されました。
Availability: 1.2.2
ご注意: これは論理値を返して整数を返さないのが「許される」版です。
これはOGC標準と違いますがOracleは持っています。
ジオメトリの例
--a circle covering a circle 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; --Result smallinsmall | smallcoversbig | bigcoversexterior | bigcontainsexterior --------------+----------------+-------------------+--------------------- t | f | t | f (1 row)
ジオグラフィの例
-- a point with a 300 meter buffer compared to a point, a point and its 10 meter buffer 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