空間関数を使用して、2 つのジオメトリオブジェクト間の空間関係をテストします。各関数は、指定された関係が成立する場合は 1 を返し、それ以外の場合は 0 を返します。
以下の空間関係関数が利用可能です。
| 関数 | テストされる関係 |
|---|---|
| ST_Contains | g2 のすべてのポイントが g1 の内部にあり、かつ、それらの内部は少なくとも 1 つのポイントを共有します |
| ST_Crosses | g1 と g2 は一部の内部ポイントを共有しますが、すべてではありません |
| ST_Disjoint | g1 と g2 はポイントを共有しません |
| ST_Equals | g1 と g2 はまったく同じポイントセットを占めます |
| ST_Intersects | g1 と g2 は少なくとも 1 つのポイントを共有します |
| ST_Overlaps | g1 と g2 は同じディメンションを持ち、重複しますが、どちらも他方を完全に含みません |
| ST_Relate | g1 と g2 の間の空間関係が、Dimensionally Extended 9 Intersection Model (DE-9IM) マトリックス文字列によって定義されたパターンに一致します |
| ST_Touches | g1 と g2 は少なくとも 1 つの境界ポイントを共有しますが、内部ポイントはありません |
| ST_Within | g1 のすべてのポイントが g2 の内部にあり、かつ、それらの内部は少なくとも 1 つのポイントを共有します (`ST_Contains` の逆) |
ST_Contains
ST_Contains(g1, g2)g1 が g2 を完全に含む場合、つまり、g2 のすべてのポイントが g1 の内部にあり、g1 と g2 の内部が少なくとも 1 つのポイントを共有する場合、1 を返します。それ以外の場合は 0 を返します。
g1 の境界は、その内部の一部ではありません。g1 の境界上に正確に位置するポイントは、g1 に含まれません。
戻り値の型: INT
ST_Within との関係: ST_Contains(A, B) は ST_Within(B, A) の逆です。両方とも同じ結果を返します。
例:
SELECT ST_Contains(
ST_GeometryFromText('POLYGON ((1 1, 1 4, 4 4, 4 1))'),
ST_GeometryFromText('POINT (2 2)')
);結果:
+-----------------------------------------------------------------------------------------------------+
|ST_Contains(ST_GeometryFromText('POLYGON ((1 1, 1 4, 4 4, 4 1))'), ST_GeometryFromText('POINT (2 2)')) |
+-----------------------------------------------------------------------------------------------------+
| 1 |
+-----------------------------------------------------------------------------------------------------+ST_Crosses
ST_Crosses(g1, g2)g1 と g2 が空間的に交差する場合、つまり、一部の内部ポイントを共有しますが、すべてではない場合、1 を返します。それ以外の場合は 0 を返します。
戻り値の型: INT
例:
SELECT ST_Crosses(
ST_GeometryFromText('POINT (20 20)'),
ST_GeometryFromText('POINT (25 25)')
);結果:
+----------------------------------------------------------------------------------------------+
|ST_Crosses(ST_GeometryFromText('POINT (20 20)'), ST_GeometryFromText('POINT (25 25)')) |
+----------------------------------------------------------------------------------------------+
| 0 |
+----------------------------------------------------------------------------------------------+ST_Disjoint
ST_Disjoint(g1, g2)g1 と g2 が空間的に分離している場合、つまり、まったくポイントを共有しない場合、1 を返します。それ以外の場合は 0 を返します。
戻り値の型: INT
例:
SELECT ST_Disjoint(
ST_GeometryFromText('POINT (50 100)'),
ST_GeometryFromText('POINT (150 150)')
);結果:
+--------------------------------------------------------------------------------------------------+
|ST_Disjoint(ST_GeometryFromText('POINT (50 100)'), ST_GeometryFromText('POINT (150 150)')) |
+--------------------------------------------------------------------------------------------------+
| 1 |
+--------------------------------------------------------------------------------------------------+ST_Equals
ST_Equals(g1, g2)g1 と g2 が空間的に等しい場合、つまり、まったく同じポイントセットを占める場合、1 を返します。それ以外の場合は 0 を返します。
戻り値の型: INT
例:
SELECT ST_Equals(
ST_GeometryFromText('POINT (50 100)'),
ST_GeometryFromText('POINT (150 150)')
);結果:
+------------------------------------------------------------------------------------------------+
|ST_Equals(ST_GeometryFromText('POINT (50 100)'), ST_GeometryFromText('POINT (150 150)')) |
+------------------------------------------------------------------------------------------------+
| 0 |
+------------------------------------------------------------------------------------------------+ST_Intersects
ST_Intersects(g1, g2)g1 と g2 が空間的に交差する場合、つまり、少なくとも 1 つのポイントを共有する場合、1 を返します。それ以外の場合は 0 を返します。
戻り値の型: INT
例:
SELECT ST_Intersects(
ST_GeometryFromText('POINT (50 100)'),
ST_GeometryFromText('POINT (150 150)')
);結果:
+----------------------------------------------------------------------------------------------------+
|ST_Intersects(ST_GeometryFromText('POINT (50 100)'), ST_GeometryFromText('POINT (150 150)')) |
+----------------------------------------------------------------------------------------------------+
| 0 |
+----------------------------------------------------------------------------------------------------+ST_Overlaps
ST_Overlaps(g1, g2)g1 と g2 が空間的に重複する場合、つまり、同じディメンションを持ち、一部のポイントを共有しますが、どちらも他方を完全に含んでいない場合、1 を返します。それ以外の場合は 0 を返します。
戻り値の型: INT
例:
SELECT ST_Overlaps(
ST_GeometryFromText('POLYGON ((1 1, 1 4, 4 4, 4 1))'),
ST_GeometryFromText('POLYGON ((3 3, 3 5, 5 5, 5 3))')
);結果:
+---------------------------------------------------------------------------------------------------------------------------------+
|ST_Overlaps(ST_GeometryFromText('POLYGON ((1 1, 1 4, 4 4, 4 1))'), ST_GeometryFromText('POLYGON ((3 3, 3 5, 5 5, 5 3))')) |
+---------------------------------------------------------------------------------------------------------------------------------+
| 1 |
+---------------------------------------------------------------------------------------------------------------------------------+ST_Relate
ST_Relate(g1, g2, s1)g1 と g2 の間の空間関係が、DE-9IM マトリックス文字列 s1 によって指定されたパターンに一致する場合、1 を返します。それ以外の場合は 0 を返します。
Dimensionally Extended 9 Intersection Model (DE-9IM) は、2 つのジオメトリ間の関係を、記号 F、0、1、2、T、および * を使用して 9 文字の文字列として記述します。ST_Contains や ST_Touches のような名前付き関数が、テストする必要がある正確な関係をカバーしていない場合は、ST_Relate を使用します。
パラメーター:
| パラメーター | 型 | 説明 |
|---|---|---|
g1 | geometry | 最初のジオメトリ |
g2 | geometry | 2 番目のジオメトリ |
s1 | VARCHAR | DE-9IM マトリックスパターン文字列 (例: 'T*****FF*') |
戻り値の型: INT
例:
SELECT ST_Relate(
ST_GeometryFromText('LINESTRING (0 0, 3 3)'),
ST_GeometryFromText('LINESTRING (1 1, 4 1)'),
'****T****'
);結果:
+--------------------------------------------------------------------------------------------------------------------------+
|ST_Relate(ST_GeometryFromText('LINESTRING (0 0, 3 3)'), ST_GeometryFromText('LINESTRING (1 1, 4 1)'), '****T****') |
+--------------------------------------------------------------------------------------------------------------------------+
| 0 |
+--------------------------------------------------------------------------------------------------------------------------+ST_Touches
ST_Touches(g1, g2)g1 と g2 が空間的に接触する場合、つまり、少なくとも 1 つの境界ポイントを共有しますが、内部ポイントはない場合、1 を返します。それ以外の場合は 0 を返します。
戻り値の型: INT
例:
SELECT ST_Touches(
ST_GeometryFromText('POINT (50 100)'),
ST_GeometryFromText('POINT (150 150)')
);結果:
+-------------------------------------------------------------------------------------------------+
|ST_Touches(ST_GeometryFromText('POINT (50 100)'), ST_GeometryFromText('POINT (150 150)')) |
+-------------------------------------------------------------------------------------------------+
| 0 |
+-------------------------------------------------------------------------------------------------+ST_Within
ST_Within(g1, g2)g1 が g2 の内部に完全に位置する場合、つまり、g1 のすべてのポイントが g2 の内部にあり、g1 と g2 の内部が少なくとも 1 つのポイントを共有する場合、1 を返します。それ以外の場合は 0 を返します。
戻り値の型: BOOLEAN
ST_Contains との関係: ST_Within(A, B) は ST_Contains(B, A) の逆です。両方とも同じ結果を返します。
例:
SELECT ST_Within(
ST_GeometryFromText('POINT (50 100)'),
ST_GeometryFromText('POINT (150 150)')
);結果:
+-------------------------------------------------------------------------------------------------+
|ST_Within(ST_GeometryFromText('POINT (50 100)'), ST_GeometryFromText('POINT (150 150)')) |
+-------------------------------------------------------------------------------------------------+
| 0 |
+-------------------------------------------------------------------------------------------------+