본문으로 건너뛰기
최종 수정: 에

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