ST_DISTANCE_SPHERE
デスクリプション
地球上の2点間の球面距離をメートル単位で計算します。入力パラメータは、それぞれ点Xの経度、点Xの緯度、点Yの経度、点Yの緯度です。
Sytax
ST_DISTANCE_SPHERE( <x_lng>, <x_lat>, <y_lng>, <y_lat>)
パラメータ
| Parameter | デスクリプション |
|---|---|
<x_lng> | 点Xの経度。DOUBLE型で、有効範囲は[-180, 180]です(範囲外の場合はNULLを返します)。 |
<y_lng> | 点Xの緯度。DOUBLE型で、有効範囲は[-90, 90]です(範囲外の場合はNULLを返します)。 |
<x_lat> | 点Yの経度。DOUBLE型で、有効範囲は[-180, 180]です(範囲外の場合はNULLを返します)。 |
<y_lat> | 点Yの緯度。DOUBLE型で、有効範囲は[-90, 90]です(範囲外の場合はNULLを返します)。 |
戻り値
2点間の最短球面距離をメートル単位(DOUBLE型)で返します。
ST_DISTANCE_SPHEREには以下のエッジケースがあります:
- 入力パラメータのいずれかがNULLの場合、NULLを返します。
- 経度が[-180, 180]の範囲外、または緯度が[-90, 90]の範囲外の場合、NULLを返します。
- 2つの点が完全に同一(経度と緯度の値が同じ)の場合、0を返します(距離は0)。
Example
同一の2点(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 |
+----------------------------------------------------------------------------+
赤道上の2点(経度差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 |
+-------------------------------------------+
同一の座標が2つある場合は0を返します
mysql> SELECT ST_DISTANCE_SPHERE(1,1 , 1, 1);
+--------------------------------+
| ST_DISTANCE_SPHERE(1,1 , 1, 1) |
+--------------------------------+
| 0 |
+--------------------------------+