ST_CONTAINS
詳細
ある幾何学的図形(shape1)が別の幾何学的図形(shape2)を完全に含んでいるかどうかを判定します。shape1がshape2のすべての点を含む場合は1を返し、そうでない場合は0を返します。
- 点の場合:点はポリゴンの内側または境界上に位置している必要があります。
- 線の場合:線のすべての点がポリゴンの内側または境界上に位置している必要があります。
- ポリゴンの場合:含まれるポリゴンは外側のポリゴンの完全に内側に位置している必要があります(境界は重複可能です)。
Sytax
ST_CONTAINS( <shape1>, <shape2>)
パラメータ
| パラメータ | 説明 |
|---|---|
<shape1> | 別の図形が含まれるかどうかをチェックするために使用される幾何学的図形で、Polygon型をサポートしています。 |
<shape2> | 含まれるかどうかをチェックするために使用される幾何学的図形で、Point、Line、Polygonなどの型をサポートしています。 |
戻り値
- 1: shape1がshape2を完全に含むことを示します。
- 0: shape1がshape2を含まないことを示します。
ST_CONTAINSには以下のエッジケースがあります:
- いずれかの入力パラメータがNULLの場合、NULLを返します。
- 入力された幾何学的図形が無効な場合(例:自己交差するポリゴン)、NULLを返します。
- shape2の境界がshape1の境界と部分的に重複しているが、shape2の一部がshape1の外側にある場合、0を返します。
例
Polygonがポイントを含む(ポイントが内側)
SELECT ST_Contains(ST_Polygon("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))"), ST_Point(5, 5));
+----------------------------------------------------------------------------------------+
| st_contains(st_polygon('POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))'), st_point(5.0, 5.0)) |
+----------------------------------------------------------------------------------------+
| 1 |
+----------------------------------------------------------------------------------------+
Polygonにポイントが含まれていません(ポイントが外側にあります)
SELECT ST_Contains(ST_Polygon("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))"), ST_Point(50, 50));
+------------------------------------------------------------------------------------------+
| st_contains(st_polygon('POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))'), st_point(50.0, 50.0)) |
+------------------------------------------------------------------------------------------+
| 0 |
+------------------------------------------------------------------------------------------+
Polygon内に線が含まれる(線が完全に内側にある)
mysql> SELECT ST_Contains( ST_Polygon("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))"), ST_Linefromtext("LINESTRING (2 2, 8 8)"));
+-----------------------------------------------------------------------------------------------------------------+
| ST_Contains( ST_Polygon("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))"), ST_Linefromtext("LINESTRING (2 2, 8 8)")) |
+-----------------------------------------------------------------------------------------------------------------+
| 1 |
+-----------------------------------------------------------------------------------------------------------------+
Polygon は線を含んでいません(線が部分的に外側にあります)
mysql> SELECT ST_Contains( ST_Polygon("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))"), ST_Linefromtext("LINESTRING (5 5, 15 15)"));
+-------------------------------------------------------------------------------------------------------------------+
| ST_Contains( ST_Polygon("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))"), ST_Linefromtext("LINESTRING (5 5, 15 15)")) |
+-------------------------------------------------------------------------------------------------------------------+
| 0 |
+-------------------------------------------------------------------------------------------------------------------+
Polygonは多角形を含んでいます(内部の多角形が完全に含まれています)
mysql> SELECT ST_Contains( ST_Polygon("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))"), ST_Polygon("POLYGON ((2 2, 8 2, 8 8, 2 8, 2 2))"));
+--------------------------------------------------------------------------------------------------------------------------+
| ST_Contains( ST_Polygon("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))"), ST_Polygon("POLYGON ((2 2, 8 2, 8 8, 2 8, 2 2))")) |
+--------------------------------------------------------------------------------------------------------------------------+
| 1 |
+--------------------------------------------------------------------------------------------------------------------------+
Polygonにpolygonが含まれていません(内側のpolygonが部分的に外側にあります)
mysql> SELECT ST_Contains( ST_Polygon("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))"), ST_Polygon("POLYGON ((5 5, 15 5, 15 15, 5 15, 5 5))"));
+------------------------------------------------------------------------------------------------------------------------------+
| ST_Contains( ST_Polygon("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))"), ST_Polygon("POLYGON ((5 5, 15 5, 15 15, 5 15, 5 5))")) |
+------------------------------------------------------------------------------------------------------------------------------+
| 0 |
+------------------------------------------------------------------------------------------------------------------------------+
ポリゴンと境界点(ポリゴン境界上の点)
mysql> SELECT ST_Contains( ST_Polygon("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))"), ST_Point(0, 5));
+---------------------------------------------------------------------------------------+
| ST_Contains( ST_Polygon("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))"), ST_Point(0, 5)) |
+---------------------------------------------------------------------------------------+
| 0 |
+---------------------------------------------------------------------------------------+
NULL パラメータ (NULL を返す)
mysql> SELECT ST_Contains(NULL, ST_Point(5, 5));
+-----------------------------------+
| ST_Contains(NULL, ST_Point(5, 5)) |
+-----------------------------------+
| NULL |
+-----------------------------------+
パラメータとしての自己交差ポリゴン
mysql> SELECT ST_Contains( ST_Polygon("POLYGON ((0 0, 1 1, 0 1, 1 0, 0 0))"), ST_Point(0.5, 0.5));
+--------------------------------------------------------------------------------------+
| ST_Contains( ST_Polygon("POLYGON ((0 0, 1 1, 0 1, 1 0, 0 0))"), ST_Point(0.5, 0.5)) |
+--------------------------------------------------------------------------------------+
| NULL |
+--------------------------------------------------------------------------------------+