최종 수정: 에
ST_WITHIN
설명
한 기하 도형(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 |
+-----------------------------------------------------------------------------------+