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

ST_INTERSECTS

설명​

두 기하 도형이 교차하는지, 즉 하나 이상의 공통점이 있는지(경계에서의 접촉 또는 내부 영역의 겹침 포함) 판별합니다.

참고

Apache Doris 3.0.6부터 지원됩니다.

구문​

ST_INTERSECTS( <shape1>, <shape2>)

매개변수​

매개변수설명
<shape1>다른 도형과 교차하는지 판별할 첫 번째 기하 도형입니다. Point, Line, Polygon, Circle 등의 타입을 지원합니다.
<shape2>다른 도형과 교차하는지 판별할 두 번째 기하 도형입니다. Point, Line, Polygon, Circle 등의 타입을 지원합니다.

반환값​

1 반환: shape1이 shape2와 교차합니다.

0 반환: shape1이 shape2와 교차하지 않습니다.

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

  • 입력 매개변수 중 하나라도 NULL이면 NULL을 반환합니다.
  • 입력 기하 도형이 유효하지 않으면 NULL을 반환합니다.
  • 입력이 빈 기하 도형이면 NULL을 반환합니다.
  • 두 도형이 경계에서만 접하는 경우(공통점이 하나뿐인 경우) 1을 반환합니다(경계에서의 접촉도 교차로 간주합니다).

예제​

다각형 내부의 점(교차, 1 반환)

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

다각형 경계 위의 점(교차, 1 반환)


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

다각형 외부의 점(교차하지 않음, 0 반환)

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

선이 서로 교차하는 경우(교차, 1 반환)

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

선이 하나의 공통점을 공유하는 경우

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

선이 평행하고 서로 떨어져 있는 경우(교차하지 않음, 0 반환)

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

선이 다각형의 내부를 통과하는 경우(교차, 1 반환)

mysql> SELECT ST_INTERSECTS(  ST_Polygon("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))"),  ST_Linefromtext("LINESTRING (2 2, 8 8)"));
+-------------------------------------------------------------------------------------------------------------------+
| ST_INTERSECTS( ST_Polygon("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))"), ST_Linefromtext("LINESTRING (2 2, 8 8)")) |
+-------------------------------------------------------------------------------------------------------------------+
| 1 |
+-------------------------------------------------------------------------------------------------------------------+

선이 다각형의 경계에 접하는 경우(교차, 1 반환)

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

선이 다각형의 완전히 바깥에 있는 경우(교차하지 않음, 0 반환)

mysql> SELECT ST_INTERSECTS(  ST_Polygon("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))"),  ST_Linefromtext("LINESTRING (11 1, 11 9)"));
+---------------------------------------------------------------------------------------------------------------------+
| ST_INTERSECTS( ST_Polygon("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))"), ST_Linefromtext("LINESTRING (11 1, 11 9)")) |
+---------------------------------------------------------------------------------------------------------------------+
| 0 |
+---------------------------------------------------------------------------------------------------------------------+

다각형이 서로 겹치는 경우(교차, 1 반환)

mysql> SELECT ST_INTERSECTS(  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_INTERSECTS( 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))")) |
+--------------------------------------------------------------------------------------------------------------------------------+
| 1 |
+--------------------------------------------------------------------------------------------------------------------------------+

다각형이 서로 완전히 떨어져 있는 경우(교차하지 않음, 0 반환)

mysql> SELECT ST_INTERSECTS(  ST_Polygon("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))"),  ST_Polygon("POLYGON ((20 20, 30 20, 30 30, 20 30, 20 20))"));
+--------------------------------------------------------------------------------------------------------------------------------------+
| ST_INTERSECTS( ST_Polygon("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))"), ST_Polygon("POLYGON ((20 20, 30 20, 30 30, 20 30, 20 20))")) |
+--------------------------------------------------------------------------------------------------------------------------------------+
| 0 |
+--------------------------------------------------------------------------------------------------------------------------------------+

다각형이 경계에서 서로 접하는 경우(교차, 1 반환)


mysql> SELECT ST_INTERSECTS( 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_INTERSECTS( 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 |
+--------------------------------------------------------------------------------------------------------------------------+

원과 원 내부의 점(교차, 1 반환)

mysql> SELECT ST_INTERSECTS(  ST_Circle(0, 0, 1000),  ST_Point(0.005, 0));
+-------------------------------------------------------------+
| ST_INTERSECTS( ST_Circle(0, 0, 1000), ST_Point(0.005, 0)) |
+-------------------------------------------------------------+
| 1 |
+-------------------------------------------------------------+

원이 선에 접하는 경우(교차, 1 반환)

mysql> SELECT ST_INTERSECTS(  ST_Circle(0, 0, 1000),  ST_Linefromtext("LINESTRING (0.01 0.01, 0.02 0.02)"));
+-----------------------------------------------------------------------------------------------+
| ST_INTERSECTS( ST_Circle(0, 0, 1000), ST_Linefromtext("LINESTRING (0.01 0.01, 0.02 0.02)")) |
+-----------------------------------------------------------------------------------------------+
| 1 |
+-----------------------------------------------------------------------------------------------+

원과 다각형이 서로 완전히 떨어져 있는 경우(교차하지 않음, 0 반환)

mysql> SELECT ST_INTERSECTS(  ST_Polygon("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))"),  ST_Circle(20, 5, 5));
+----------------------------------------------------------------------------------------------+
| ST_INTERSECTS( ST_Polygon("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))"), ST_Circle(20, 5, 5)) |
+----------------------------------------------------------------------------------------------+
| 0 |
+----------------------------------------------------------------------------------------------+

원이 다각형과 교차하는 경우

mysql> SELECT ST_INTERSECTS(  ST_Polygon("POLYGON ((0 0, 5 0, 5 5, 0 5, 0 0))"),  ST_Circle(5, 2.5, 2000));
+----------------------------------------------------------------------------------------------+
| ST_INTERSECTS( ST_Polygon("POLYGON ((0 0, 5 0, 5 5, 0 5, 0 0))"), ST_Circle(5, 2.5, 2000)) |
+----------------------------------------------------------------------------------------------+
| 1 |
+----------------------------------------------------------------------------------------------+

빈 기하 도형

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

유효하지 않은 다각형(NULL 반환)

mysql> SELECT ST_INTERSECTS(  ST_Polygon("POLYGON ((0 0, 1 1, 0 1, 1 0, 0 0))"),  ST_Point(0.5, 0.5));
+-----------------------------------------------------------------------------------------+
| ST_INTERSECTS( 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_INTERSECTS(NULL, ST_Point(5, 5));
+-------------------------------------+
| ST_INTERSECTS(NULL, ST_Point(5, 5)) |
+-------------------------------------+
| NULL |
+-------------------------------------+