최종 수정: 에
ST_DISTANCE_SPHERE
설명
지구상의 두 지점 사이의 구면 거리를 미터 단위로 계산합니다. 입력 매개변수는 순서대로 X 지점의 경도, X 지점의 위도, Y 지점의 경도, Y 지점의 위도입니다.
구문
ST_DISTANCE_SPHERE( <x_lng>, <x_lat>, <y_lng>, <y_lat>)
매개변수
| 매개변수 | 설명 |
|---|---|
<x_lng> | X 지점의 경도. DOUBLE 타입이며, 유효 범위는 [-180, 180]입니다(범위를 벗어나면 NULL을 반환합니다). |
<x_lat> | X 지점의 위도. DOUBLE 타입이며, 유효 범위는 [-90, 90]입니다(범위를 벗어나면 NULL을 반환합니다). |
<y_lng> | Y 지점의 경도. DOUBLE 타입이며, 유효 범위는 [-180, 180]입니다(범위를 벗어나면 NULL을 반환합니다). |
<y_lat> | Y 지점의 위도. DOUBLE 타입이며, 유효 범위는 [-90, 90]입니다(범위를 벗어나면 NULL을 반환합니다). |
반환값
두 지점 사이의 최단 구면 거리를 미터 단위로 반환합니다(DOUBLE 타입).
ST_DISTANCE_SPHERE는 다음과 같은 경계 조건에서 아래와 같이 동작합니다.
- 입력 매개변수 중 하나라도 NULL이면 NULL을 반환합니다.
- 경도가 [-180, 180] 범위를 벗어나거나 위도가 [-90, 90] 범위를 벗어나면 NULL을 반환합니다.
- 두 지점이 완전히 동일하면(경도와 위도 값이 같으면) 0을 반환합니다(거리는 0).
예제
지구상에서 서로 가까운 두 지점
select st_distance_sphere(116.35620117, 39.939093, 116.4274406433, 39.9020987219);
+----------------------------------------------------------------------------+
| st_distance_sphere(116.35620117, 39.939093, 116.4274406433, 39.9020987219) |
+----------------------------------------------------------------------------+
| 7336.9135549995917 |
+----------------------------------------------------------------------------+
적도 위의 두 지점(경도 차이 1°, 위도 0°)
mysql> SELECT ST_DISTANCE_SPHERE(0, 0, 1, 0);
+--------------------------------+
| ST_DISTANCE_SPHERE(0, 0, 1, 0) |
+--------------------------------+
| 111195.10117748393 |
+--------------------------------+
경도 차이가 20°로 실제로는 서로 가까운 두 지점
-- Point X(170, 0), Point Y(-170, 0) (longitude difference of 20° instead of 340°, taking the shortest path)
mysql> SELECT ST_DISTANCE_SPHERE(170, 0, -170, 0);
+-------------------------------------+
| ST_DISTANCE_SPHERE(170, 0, -170, 0) |
+-------------------------------------+
| 2223902.023549678 |
+-------------------------------------+
유효하지 않은 매개변수(위도가 범위를 벗어남)
mysql> SELECT ST_DISTANCE_SPHERE(116, 39, 120, 91);
+--------------------------------------+
| ST_DISTANCE_SPHERE(116, 39, 120, 91) |
+--------------------------------------+
| NULL |
+--------------------------------------+
매개변수가 NULL이면 NULL 반환
mysql> SELECT ST_DISTANCE_SPHERE(NULL, 39.9, 116.4, 30);
+-------------------------------------------+
| ST_DISTANCE_SPHERE(NULL, 39.9, 116.4, 30) |
+-------------------------------------------+
| NULL |
+-------------------------------------------+
두 좌표가 동일하면 0 반환
mysql> SELECT ST_DISTANCE_SPHERE(1,1 , 1, 1);
+--------------------------------+
| ST_DISTANCE_SPHERE(1,1 , 1, 1) |
+--------------------------------+
| 0 |
+--------------------------------+