メインコンテンツまでスキップ
バージョン: 4.x

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 |
+--------------------------------+