ST_ContainsProperly — BがAの内部にインタセクトするが境界または外部にインタセクトしないかどうかをテストします。
boolean ST_ContainsProperly(
geometry geomA, geometry geomB)
;
BがAの内部にインタセクトするが境界と外部にインタセクトしない場合にはTRUEを返します。
Aは自身を正しく含むことはありませんが、自身を含みます。
他のジオメトリの全てのポイントは、このジオメトリの内部のポイントです。 ST_Relateで使われるDE-9IMでは[T**FF*FF*]に合致します。
この述語の使用事例として、大きいポリゴンジオメトリでのジオメトリの集合のインタセクションを計算することが挙げられます。インタセクションはかなり遅いので、ContainsProperlyを使って、対象ジオメトリのうち全体が領域内にあるものを抜き出すことができ、効率的になります。これらの場面では、インタセクションは確実に元の対象ジオメトリであることが直感的に分かります。
![]() | |
This function automatically includes a bounding box comparison
that makes use of any spatial indexes that are available on the geometries. インデックスの使用を避けるには |
![]() | |
この関数は、個々のポイントでトポロジを計算する必要が無く、より効率的に計算できる点で、ST_ContainsとST_Intersectsより優れています。 |
GEOSモジュールで実現しています。
Availability: 1.4.0
![]() | |
Enhanced: 3.0.0 |
![]() | |
この関数を不正なジオメトリで呼ばないでください。予期しない結果が返されます。 |
-- 円内の円 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 (SELECT ST_Buffer(ST_GeomFromText('POINT(1 2)'), 10) As smallc, ST_Buffer(ST_GeomFromText('POINT(1 2)'), 20) As bigc) As foo; -- 結果 smallcontainspropbig | bigcontainspropsmall | bigcontainspropunion | bigisunion | bigcoversexterior | bigcontainsexterior ------------------+------------------+------------------+------------+-------------------+--------------------- f | t | f | t | t | f -- ST_ContainsとST_ContainsProperlyとの違いを示す例 SELECT ST_GeometryType(geomA) As geomtype, ST_Contains(geomA,geomA) AS acontainsa, ST_ContainsProperly(geomA, geomA) AS acontainspropa, ST_Contains(geomA, ST_Boundary(geomA)) As acontainsba, ST_ContainsProperly(geomA, ST_Boundary(geomA)) As acontainspropba FROM (VALUES ( ST_Buffer(ST_Point(1,1), 5,1) ), ( ST_MakeLine(ST_Point(1,1), ST_Point(-1,-1) ) ), ( ST_Point(1,1) ) ) As foo(geomA); geomtype | acontainsa | acontainspropa | acontainsba | acontainspropba --------------+------------+----------------+-------------+----------------- ST_Polygon | t | f | f | f ST_LineString | t | f | f | f ST_Point | t | t | f | f