ST_ContainsProperly — B の全てのポイントが A の内部にあるかをテストします。
boolean ST_ContainsProperly(geometry geomA, geometry geomB);
B の全てのポイントが A の内部にある (もしくは B のポイントで A の外部にあるポイントが無い) 場合にTRUEを返します。
数学用語では: ST_ContainsProperly(A, B) ⇔ Int(A) ⋂ B = B
二つのジオメトリーの DE-9IM 交差行列が[T**FF*FF*]に合致する場合には、A が B を完全に含みます。
A は自身を正しく含むことはありませんが、自身を含みます。
大きいポリゴンジオメトリーでのジオメトリーの集合のインタセクションを計算する際にこの述語を使います。インタセクションはかなり遅いので、ContainsProperly を使って、対象ジオメトリーのうち全体が領域内にあるものを抜き出すことができ、効率的になります。これらの場面では、インタセクションは確実に元の対象ジオメトリーであることが直感的に分かります。
|
|
|
この関数を実行すると、対象ジオメトリーにおいて使用できるインデックスを使用したバウンディングボックスによる比較が自動的に行われます。 インデックスの使用を避けるには |
|
|
|
この関数は、個々のポイントでトポロジを計算する必要が無く、より効率的に計算できる点で、ST_ContainsとST_Intersectsより優れています。 |
GEOS モジュールで実現しています。
Availability: 1.4.0
Enhanced: 3.0.0 GEOMETRYCOLLECTIONへの対応が可能となりました
|
|
|
この関数を不正なジオメトリーで呼ばないでください。予期しない結果が返されます。 |
この例ではある円がもう一つの円の中にあるかどうかをテストします。
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_ContainsProperly(smallc, bigc) AS smallcontainspropbig,
ST_ContainsProperly(bigc, smallc) AS bigcontainspropsmall,
ST_ContainsProperly(bigc, ST_Union(smallc, bigc)) AS bigcontainspropunion,
ST_Equals(bigc, ST_Union(smallc, bigc)) AS bigisunion,
ST_Covers(bigc, ST_ExteriorRing(bigc)) AS bigcoversexterior,
ST_ContainsProperly(bigc, ST_ExteriorRing(bigc)) AS bigcontainsexterior
FROM circles;
-[ RECORD 1 ]----- smallcontainspropbig | f bigcontainspropsmall | t bigcontainspropunion | f bigisunion | t bigcoversexterior | t bigcontainsexterior | f
この例では ST_Contains と ST_ContainsProperly との差異を示します。
WITH input(geom) AS (VALUES
(ST_Buffer(ST_Point(1, 1), 5, 1)),
(ST_MakeLine(ST_Point(1, 1), ST_Point(-1, -1))),
(ST_Point(1, 1))
)
SELECT ST_GeometryType(geom) AS geomtype,
ST_Contains(geom, geom) AS acontainsa,
ST_ContainsProperly(geom, geom) AS acontainspropa,
ST_Contains(geom, ST_Boundary(geom)) AS acontainsba,
ST_ContainsProperly(geom, ST_Boundary(geom)) AS acontainspropba
FROM input;
geomtype | acontainsa | acontainspropa | acontainsba | acontainspropba --------------+------------+----------------+-------------+----------------- ST_Polygon | t | f | f | f ST_LineString | t | f | f | f ST_Point | t | t | f | f