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

ST_ANGLE

설명​

세 점을 입력합니다. 첫 번째 직선은 point1(첫 번째 끝점)과 point2(두 번째 끝점)를 연결하는 직선입니다. 두 번째 직선은 point2(첫 번째 끝점)와 point3(두 번째 끝점)을 연결하는 직선입니다. 두 직선은 point2에서 교차합니다. 이 함수는 첫 번째 직선에서 두 번째 직선까지 시계 방향으로 잰 각도를 반환합니다. 각 끝점의 좌표에서 x 값(경도)은 [-180, 180] 범위에, y 값(위도)은 [-90, 90] 범위에 있어야 합니다.

구문​

ST_ANGLE( <point1>, <point2>, <point3>)

매개변수​

매개변수설명
<point1>첫 번째 직선의 첫 번째 끝점이며, 타입은 GeoPoint입니다.
<point2>첫 번째 직선의 두 번째 끝점이자 두 번째 직선의 첫 번째 끝점이며, 타입은 GeoPoint입니다.
<point3>두 번째 직선의 두 번째 끝점이며, 타입은 GeoPoint입니다.

반환값​

두 직선 사이의 각도를 라디안 단위의 배정밀도 부동 소수점 수로 반환하며, 범위는 [0, 2π)입니다. 각도는 첫 번째 직선에서 두 번째 직선까지 시계 방향으로 측정합니다.

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

  • point2와 point3이 같으면 NULL을 반환합니다.
  • point2와 point1이 같으면 NULL을 반환합니다.
  • point2와 point3이 정확히 대척점 관계이면 NULL을 반환합니다.
  • point2와 point1이 정확히 대척점 관계이면 NULL을 반환합니다.
  • 어느 점이든 좌표가 x(경도) 또는 y(위도)에 지정된 범위를 벗어나면 NULL을 반환합니다.
  • 입력한 점 중 하나라도 NULL이면 NULL을 반환합니다.

예제​

SELECT ST_Angle(ST_Point(1, 0),ST_Point(0, 0),ST_Point(0, 1));

첫 번째 직선에서 두 번째 직선까지 시계 방향으로 잰 각도는 4.7 라디안입니다.

+----------------------------------------------------------------------+
| st_angle(st_point(1.0, 0.0), st_point(0.0, 0.0), st_point(0.0, 1.0)) |
+----------------------------------------------------------------------+
| 4.71238898038469 |
+----------------------------------------------------------------------+
SELECT ST_Angle(ST_Point(0, 0),ST_Point(1, 0),ST_Point(0, 1));

첫 번째 직선에서 두 번째 직선까지 시계 방향으로 잰 각도는 0.78 라디안입니다.

+----------------------------------------------------------------------+
| st_angle(st_point(0.0, 0.0), st_point(1.0, 0.0), st_point(0.0, 1.0)) |
+----------------------------------------------------------------------+
| 0.78547432161873854 |
+----------------------------------------------------------------------+
SELECT ST_Angle(ST_Point(1, 0),ST_Point(0, 0),ST_Point(1, 0));

두 직선이 겹치므로 시계 방향으로 잰 각도는 0입니다.

+----------------------------------------------------------------------+
| st_angle(st_point(1.0, 0.0), st_point(0.0, 0.0), st_point(1.0, 0.0)) |
+----------------------------------------------------------------------+
| 0 |
+----------------------------------------------------------------------+

point2와 point3이 같으므로 NULL을 반환합니다.

SELECT ST_Angle(ST_Point(1, 0),ST_Point(0, 0),ST_Point(0, 0));
+----------------------------------------------------------------------+
| st_angle(st_point(1.0, 0.0), st_point(0.0, 0.0), st_point(0.0, 0.0)) |
+----------------------------------------------------------------------+
| NULL |
+----------------------------------------------------------------------+

두 직선의 방향이 서로 대척 방향이므로 NULL을 반환합니다.

SELECT ST_Angle(ST_Point(0, 0),ST_Point(-30, 0),ST_Point(150, 0));
+--------------------------------------------------------------------------+
| st_angle(st_point(0.0, 0.0), st_point(-30.0, 0.0), st_point(150.0, 0.0)) |
+--------------------------------------------------------------------------+
| NULL |
+--------------------------------------------------------------------------+

점 중 하나라도 NULL이면 NULL을 반환합니다.

mysql> SELECT ST_Angle(NULL,ST_Point(-30, 0),ST_Point(-150, 0)) ;
+---------------------------------------------------+
| ST_Angle(NULL,ST_Point(-30, 0),ST_Point(-150, 0)) |
+---------------------------------------------------+
| NULL |
+---------------------------------------------------+

좌표 중 하나라도 지정된 범위를 벗어나면 NULL을 반환합니다.


mysql> SELECT ST_Angle(ST_Point(0, 0),ST_Point(-30, 0),ST_Point(180, 91));
+-------------------------------------------------------------+
| ST_Angle(ST_Point(0, 0),ST_Point(-30, 0),ST_Point(180, 91)) |
+-------------------------------------------------------------+
| NULL |
+-------------------------------------------------------------+

좌표 중 하나라도 NULL이면 NULL을 반환합니다.

mysql> SELECT ST_Angle(NULL,ST_Point(-30, 0),ST_Point(150, 90));
+---------------------------------------------------+
| ST_Angle(NULL,ST_Point(-30, 0),ST_Point(150, 90)) |
+---------------------------------------------------+
| NULL |
+---------------------------------------------------+