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

ST_WITHIN

SinceVersion dev

설명​

한 기하 도형(shape1)이 다른 기하 도형(shape2)의 내부에 완전히 포함되는지 판별합니다. shape1이 shape2 내부에 완전히 포함되면 1을 반환하고, 그렇지 않으면 0을 반환합니다.

ST_WITHIN(shape1, shape2)은 논리적으로 ST_CONTAINS(shape2, shape1)과 동일합니다.

  • 점: 점은 다각형 내부에 있어야 합니다. 점이 다각형 경계에 있으면 0을 반환합니다.
  • 선: 인수의 순서를 바꾼 ST_CONTAINS와 동일한 구면 기하학 규칙에 따라 포함 여부를 판별합니다.
  • 다각형: 내부 다각형은 ST_CONTAINS에서 사용하는 S2 포함 규칙에 따라 외부 다각형에 포함되어야 합니다.

구문​

ST_WITHIN( <shape1>, <shape2>)

매개변수​

매개변수설명
<shape1>인코딩된 기하 도형 값(VARCHAR)으로, ST_Point 또는 ST_GeometryFromText와 같은 공간 생성자가 반환합니다.
<shape2>다른 도형을 포함하는 인코딩된 기하 도형(VARCHAR)입니다. Polygon과 MultiPolygon은 Point, LineString, Polygon, MultiPolygon 입력을 지원하며, Circle은 Point 입력을 지원합니다. 그 밖의 유효한 도형 조합은 0을 반환합니다.

반환 값​

BOOLEAN을 반환하며, SQL 결과에서는 1 또는 0으로 표시됩니다. 원시 WKT는 먼저 공간 생성자를 사용하여 변환해야 합니다.

  • 1: shape1이 shape2 내부에 완전히 포함됨을 나타냅니다.
  • 0: shape1이 shape2 내부에 포함되지 않음을 나타냅니다.

ST_WITHIN은 다음과 같은 경계 사례를 처리합니다.

  • 입력 매개변수 중 하나라도 NULL이면 NULL을 반환합니다.
  • 입력 기하 도형이 유효하지 않으면(예: 자기 교차 다각형) NULL을 반환합니다.
  • shape1의 일부가 경계에 있고 다른 일부가 shape2 바깥에 있으면 0을 반환합니다.

예제​

다각형 내부에 있는 점

SELECT ST_Within(ST_Point(5, 5), ST_Polygon("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))"));
+-------------------------------------------------------------------------------------+
| st_within(st_point(5.0, 5.0), st_polygon('POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))')) |
+-------------------------------------------------------------------------------------+
| 1 |
+-------------------------------------------------------------------------------------+

다각형 바깥에 있는 점

SELECT ST_Within(ST_Point(50, 50), ST_Polygon("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))"));
+---------------------------------------------------------------------------------------+
| st_within(st_point(50.0, 50.0), st_polygon('POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))')) |
+---------------------------------------------------------------------------------------+
| 0 |
+---------------------------------------------------------------------------------------+

다각형 내부에 완전히 포함된 선

SELECT ST_Within(ST_LineFromText("LINESTRING (2 2, 8 8)"), ST_Polygon("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))"));
+-----------------------------------------------------------------------------------------------------------+
| st_within(st_linefromtext('LINESTRING (2 2, 8 8)'), st_polygon('POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))')) |
+-----------------------------------------------------------------------------------------------------------+
| 1 |
+-----------------------------------------------------------------------------------------------------------+

일부가 다각형 바깥에 있는 선

SELECT ST_Within(ST_LineFromText("LINESTRING (5 5, 15 15)"), ST_Polygon("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))"));
+-------------------------------------------------------------------------------------------------------------+
| st_within(st_linefromtext('LINESTRING (5 5, 15 15)'), st_polygon('POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))')) |
+-------------------------------------------------------------------------------------------------------------+
| 0 |
+-------------------------------------------------------------------------------------------------------------+

다른 다각형 내부에 완전히 포함된 다각형

SELECT ST_Within(ST_Polygon("POLYGON ((2 2, 8 2, 8 8, 2 8, 2 2))"), ST_Polygon("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))"));
+-----------------------------------------------------------------------------------------------------------------------+
| st_within(st_polygon('POLYGON ((2 2, 8 2, 8 8, 2 8, 2 2))'), st_polygon('POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))')) |
+-----------------------------------------------------------------------------------------------------------------------+
| 1 |
+-----------------------------------------------------------------------------------------------------------------------+

일부가 다른 다각형 바깥에 있는 다각형

SELECT ST_Within(ST_Polygon("POLYGON ((5 5, 15 5, 15 15, 5 15, 5 5))"), ST_Polygon("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))"));
+---------------------------------------------------------------------------------------------------------------------------+
| st_within(st_polygon('POLYGON ((5 5, 15 5, 15 15, 5 15, 5 5))'), st_polygon('POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))')) |
+---------------------------------------------------------------------------------------------------------------------------+
| 0 |
+---------------------------------------------------------------------------------------------------------------------------+

다각형 경계에 있는 점

SELECT ST_Within(ST_Point(0, 5), ST_Polygon("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))"));
+-----------------------------------------------------------------------------------+
| st_within(st_point(0.0, 5.0), st_polygon('POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))')) |
+-----------------------------------------------------------------------------------+
| 0 |
+-----------------------------------------------------------------------------------+

NULL 매개변수(NULL 반환)

SELECT ST_Within(ST_Point(5, 5), NULL);
+-----------------------------------+
| ST_Within(ST_Point(5, 5), NULL) |
+-----------------------------------+
| NULL |
+-----------------------------------+

자기 교차 다각형을 매개변수로 사용

SELECT ST_Within(ST_Point(0.5, 0.5), ST_Polygon("POLYGON ((0 0, 1 1, 0 1, 1 0, 0 0))"));
+-----------------------------------------------------------------------------------+
| st_within(st_point(0.5, 0.5), st_polygon('POLYGON ((0 0, 1 1, 0 1, 1 0, 0 0))')) |
+-----------------------------------------------------------------------------------+
| NULL |
+-----------------------------------------------------------------------------------+