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

ST_TOUCHES

설명​

두 기하 도형이 경계에서만 접하는지(즉, 경계에 공통점이 있지만 내부는 교차하지 않는지) 판별합니다. 구체적인 동작은 다음과 같습니다.

두 도형의 경계에 하나 이상의 공통점이 있고 내부가 전혀 교차하지 않으면(겹치는 영역이 없으면) 1을 반환합니다. 경계에 공통점이 없거나 내부가 교차하면(경계가 접하더라도) 0을 반환합니다.

이 함수는 인접한 다각형의 공유 변(경계에서만 접함)이나 선과 다각형 사이의 접점(경계에서만 접함) 등에서 "경계에서만 접하는 경우"와 "내부가 교차하는 경우"를 구분하는 데 사용합니다.

구문​

ST_TOUCHES( <shape1>, <shape2>)

매개변수​

매개변수설명
<shape1>접촉 여부를 판별할 첫 번째 기하 도형입니다. Point, LineString, Polygon, Circle 등의 타입을 지원합니다.
<shape2>접촉 여부를 판별할 두 번째 기하 도형입니다. Point, LineString, Polygon, Circle 등의 타입을 지원합니다.

반환값​

shape1이 shape2와 접하면 1을 반환합니다. shape1이 shape2와 접하지 않으면 0을 반환합니다.

ST_TOUCHES는 다음과 같은 특수한 경우를 처리합니다.

  • 입력 매개변수 중 하나라도 NULL이면 NULL을 반환합니다.
  • 입력 기하 도형이 유효하지 않으면 NULL을 반환합니다.
  • 입력이 빈 기하 객체(예: POINT EMPTY)이면 NULL을 반환합니다.
  • 한 도형이 다른 도형 내부에 완전히 포함되어 있으면(내부가 교차하면), 두 도형의 경계가 접하더라도 0을 반환합니다.
  • 점이 도형의 경계와 접하면(점에는 내부가 없음) 1을 반환합니다(점의 "경계"는 점 자체이며, 내부 교차 없이 도형의 경계와 일치합니다).

예제​

다각형 경계 위의 점

mysql> SELECT ST_TOUCHES(  ST_Polygon("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))"),  ST_Point(0, 5));
+--------------------------------------------------------------------------------------+
| ST_TOUCHES( ST_Polygon("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))"), ST_Point(0, 5)) |
+--------------------------------------------------------------------------------------+
| 1 |
+--------------------------------------------------------------------------------------+

다각형 경계 위에 있지 않은 점(기하 도형 내부에 있음)

mysql> SELECT ST_TOUCHES(  ST_Polygon("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))"),  ST_Point(5, 5));
+--------------------------------------------------------------------------------------+
| ST_TOUCHES( ST_Polygon("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))"), ST_Point(5, 5)) |
+--------------------------------------------------------------------------------------+
| 0 |
+--------------------------------------------------------------------------------------+

끝점에서 접하는 선

mysql> SELECT ST_TOUCHES(  ST_Linefromtext("LINESTRING (0 0, 2 2)"),  ST_Linefromtext("LINESTRING (2 2, 4 0)"));
+---------------------------------------------------------------------------------------------------+
| ST_TOUCHES( ST_Linefromtext("LINESTRING (0 0, 2 2)"), ST_Linefromtext("LINESTRING (2 2, 4 0)")) |
+---------------------------------------------------------------------------------------------------+
| 1 |
+---------------------------------------------------------------------------------------------------+

내부에서 교차하는 선(경계 접촉이 아니므로 0 반환)

mysql> SELECT ST_TOUCHES(  ST_Linefromtext("LINESTRING (0 0, 10 10)"),  ST_Linefromtext("LINESTRING (0 10, 10 0)"));
+-------------------------------------------------------------------------------------------------------+
| ST_TOUCHES( ST_Linefromtext("LINESTRING (0 0, 10 10)"), ST_Linefromtext("LINESTRING (0 10, 10 0)")) |
+-------------------------------------------------------------------------------------------------------+
| 0 |
+-------------------------------------------------------------------------------------------------------+

다각형 경계에 접하는 선


mysql> SELECT ST_TOUCHES( ST_Polygon("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))"), ST_Linefromtext("LINESTRING (10 5, 15 5)"));
+------------------------------------------------------------------------------------------------------------------+
| ST_TOUCHES( ST_Polygon("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))"), ST_Linefromtext("LINESTRING (10 5, 15 5)")) |
+------------------------------------------------------------------------------------------------------------------+
| 1 |
+------------------------------------------------------------------------------------------------------------------+

다각형 내부를 통과하는 선(내부 교차, 0 반환)



mysql> SELECT ST_TOUCHES( ST_Polygon("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))"), ST_Linefromtext("LINESTRING (5 5, 15 5)"));
+-----------------------------------------------------------------------------------------------------------------+
| ST_TOUCHES( ST_Polygon("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))"), ST_Linefromtext("LINESTRING (5 5, 15 5)")) |
+-----------------------------------------------------------------------------------------------------------------+
| 0 |
+-----------------------------------------------------------------------------------------------------------------+

경계를 공유하는 다각형(경계에서만 접함, 1 반환)

mysql> SELECT ST_TOUCHES(  ST_Polygon("POLYGON ((0 0, 5 0, 5 5, 0 5, 0 0))"),  ST_Polygon("POLYGON ((5 0, 10 0, 10 5, 5 5, 5 0))"));
+-----------------------------------------------------------------------------------------------------------------------+
| ST_TOUCHES( ST_Polygon("POLYGON ((0 0, 5 0, 5 5, 0 5, 0 0))"), ST_Polygon("POLYGON ((5 0, 10 0, 10 5, 5 5, 5 0))")) |
+-----------------------------------------------------------------------------------------------------------------------+
| 1 |
+-----------------------------------------------------------------------------------------------------------------------+

일부가 겹치는 다각형(내부 교차, 0 반환)

mysql> SELECT ST_TOUCHES(  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_TOUCHES( 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 |
+-----------------------------------------------------------------------------------------------------------------------------+

빈 도형과 다각형(접하지 않음, 0 반환)

mysql> SELECT ST_TOUCHES(  ST_Polygon("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))"),  ST_GeometryFromText("POINT EMPTY"))
-> ;
+----------------------------------------------------------------------------------------------------------+
| ST_TOUCHES( ST_Polygon("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))"), ST_GeometryFromText("POINT EMPTY")) |
+----------------------------------------------------------------------------------------------------------+
| NULL |
+----------------------------------------------------------------------------------------------------------+

유효하지 않은 자기 교차 다각형(NULL 반환)


mysql> SELECT ST_TOUCHES( ST_Polygon("POLYGON ((0 0, 1 1, 0 1, 1 0, 0 0))"),ST_Point(0.5, 0.5));
+------------------------------------------------------------------------------------+
| ST_TOUCHES( ST_Polygon("POLYGON ((0 0, 1 1, 0 1, 1 0, 0 0))"),ST_Point(0.5, 0.5)) |
+------------------------------------------------------------------------------------+
| NULL |
+------------------------------------------------------------------------------------+

매개변수가 NULL인 경우(NULL 반환)

mysql> SELECT ST_TOUCHES(NULL, ST_Point(5, 5));
+----------------------------------+
| ST_TOUCHES(NULL, ST_Point(5, 5)) |
+----------------------------------+
| NULL |
+----------------------------------+
mysql> SELECT ST_TOUCHES(ST_Polygon("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))"), NULL);
+-------------------------------------------------------------------------+
| ST_TOUCHES(ST_Polygon("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))"), NULL) |
+-------------------------------------------------------------------------+
| NULL |
+-------------------------------------------------------------------------+

선에 접하는 원

mysql> SELECT ST_TOUCHES(  ST_Circle(0, 0, 5),  ST_Linefromtext("LINESTRING (-10 5, 10 5)"));
+--------------------------------------------------------------------------------+
| ST_TOUCHES( ST_Circle(0, 0, 5), ST_Linefromtext("LINESTRING (-10 5, 10 5)")) |
+--------------------------------------------------------------------------------+
| 1 |
+--------------------------------------------------------------------------------+

원의 경계와 교차하는 점


mysql> SELECT ST_TOUCHES( ST_Circle(0, 0, 5), ST_Point(5, 0));
+---------------------------------------------------+
| ST_TOUCHES( ST_Circle(0, 0, 5), ST_Point(5, 0)) |
+---------------------------------------------------+
| 1 |
+---------------------------------------------------+

서로 접하는 두 원

mysql> SELECT ST_TOUCHES(  ST_Circle(0, 0, 5),  ST_Circle(10, 0, 5));
+--------------------------------------------------------+
| ST_TOUCHES( ST_Circle(0, 0, 5), ST_Circle(10, 0, 5)) |
+--------------------------------------------------------+
| 1 |
+--------------------------------------------------------+

원 내부에 있는 점(접하지 않음)

mysql> SELECT ST_TOUCHES(  ST_Circle(0, 0, 5),  ST_Point(4, 0));
+---------------------------------------------------+
| ST_TOUCHES( ST_Circle(0, 0, 5), ST_Point(4, 0)) |
+---------------------------------------------------+
| 0 |
+---------------------------------------------------+

원과 교차하는 선, 0 반환

mysql> SELECT ST_TOUCHES(  ST_Circle(0, 0, 5),  ST_Linefromtext("LINESTRING (-10 0, 10 0)"));
+--------------------------------------------------------------------------------+
| ST_TOUCHES( ST_Circle(0, 0, 5), ST_Linefromtext("LINESTRING (-10 0, 10 0)")) |
+--------------------------------------------------------------------------------+
| 0 |
+--------------------------------------------------------------------------------+

다각형에 접하는 원

mysql> SELECT ST_TOUCHES(  ST_Polygon("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))"),  ST_Circle(15, 5, 5));
+-------------------------------------------------------------------------------------------+
| ST_TOUCHES( ST_Polygon("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))"), ST_Circle(15, 5, 5)) |
+-------------------------------------------------------------------------------------------+
| 1 |
+-------------------------------------------------------------------------------------------+

다각형과 교차하는 원, 0 반환

mysql> SELECT ST_TOUCHES(  ST_Polygon("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))"),  ST_Circle(8, 5, 3));
+------------------------------------------------------------------------------------------+
| ST_TOUCHES( ST_Polygon("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))"), ST_Circle(8, 5, 3)) |
+------------------------------------------------------------------------------------------+
| 0 |
+------------------------------------------------------------------------------------------+