メインコンテンツまでスキップ
に最終更新

ST_CONTAINS

説明​

ある幾何形状(shape1)が別の幾何形状(shape2)を完全に包含するかどうかを判定します。shape1 が shape2 のすべての点を包含する場合は 1、それ以外の場合は 0 を返します。

  • 点の場合:点はポリゴンの内部または境界上にある必要があります。
  • 線の場合:線上のすべての点がポリゴンの内部または境界上にある必要があります。
  • ポリゴンの場合:包含されるポリゴン全体が外側のポリゴンの内部にある必要があります(境界は重なっていてもかまいません)。

構文​

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 を返します。

例​

ポリゴンが点を包含する場合(点が内部にある場合)

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 |
+----------------------------------------------------------------------------------------+

ポリゴンが点を包含しない場合(点が外側にある場合)

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 |
+------------------------------------------------------------------------------------------+

ポリゴンが線を包含する場合(線全体が内部にある場合)

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 |
+-----------------------------------------------------------------------------------------------------------------+

ポリゴンが線を包含しない場合(線の一部が外側にある場合)


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 |
+-------------------------------------------------------------------------------------------------------------------+

ポリゴンが別のポリゴンを包含する場合(内側のポリゴン全体が包含される場合)

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 |
+--------------------------------------------------------------------------------------------------------------------------+

ポリゴンが別のポリゴンを包含しない場合(内側のポリゴンの一部が外側にある場合)

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 |
+--------------------------------------------------------------------------------------+