メインコンテンツまでスキップ
に最終更新

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