Name

ST_Within — Bの外部にAのポイントが無く、かつAとBが内部に少なくとも一つのポイントを共有するかどうかをテストします。

Synopsis

boolean ST_Within(geometry A, geometry B);

説明

ジオメトリAが完全にジオメトリBの内側にある場合にはTRUEを返します。この関数が意味を持つためには、与えられるジオメトリは両方とも同じ座標系で同じSRIDを持つ必要があります。ST_Within(A,B)がTRUEかつST_Within(B,A)がTRUEである場合には、二つのジオメトリは空間的に同じであると考えられます。

この定義の微妙な点は、ジオメトリの境界はジオメトリの内部に存在しないことです。これは、ポリゴンやラインの境界にあるラインやポイントはジオメトリの内部にありません。詳細情報についてはSubtleties of OGC Covers, Contains, Withinをご覧下さい (ST_CoveredByは、より包括的な関係を提供します)。

ST_WithinはST_Containsの逆です。つまりST_Within(A,B) = ST_Contains(B,A)となります。

[Note]

This function automatically includes a bounding box comparison that makes use of any spatial indexes that are available on the geometries. インデックスの使用を避けるには_ST_Within関数を使います。

GEOSモジュールで実現しています。

Enhanced: 2.3.0 ジオメトリについて、PIP short-circuit (ポリゴンとポイントに限定した高速判定)を少ないポイントからなるマルチポイントに対応することができるよう拡張しました。以前の版ではポリゴンとポイントの組み合わせにだけ対応していました。

[Important]

Enhanced: 3.0.0 GEOMETRYCOLLECTIONへの対応が可能となりました

[Important]

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

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

This method implements the OGC Simple Features Implementation Specification for SQL 1.1. s2.1.1.2 // s2.1.13.3 - a.Relate(b, 'T*F**F***')

This method implements the SQL/MM specification. SQL-MM 3: 5.1.30

-- 円内の円
SELECT ST_Within(smallc,smallc) As smallinsmall,
  ST_Within(smallc, bigc) As smallinbig,
  ST_Within(bigc,smallc) As biginsmall,
  ST_Within(ST_Union(smallc, bigc), bigc) as unioninbig,
  ST_Within(bigc, ST_Union(smallc, bigc)) as biginunion,
  ST_Equals(bigc, ST_Union(smallc, bigc)) as bigisunion
FROM
(
SELECT ST_Buffer(ST_GeomFromText('POINT(50 50)'), 20) As smallc,
  ST_Buffer(ST_GeomFromText('POINT(50 50)'), 40) As bigc) As foo;
-- 結果
 smallinsmall | smallinbig | biginsmall | unioninbig | biginunion | bigisunion
--------------+------------+------------+------------+------------+------------
 t            | t          | f          | t          | t          | t
(1 row)
    

関連情報

ST_Contains, ST_CoveredBy, ST_Equals, ST_IsValid