に最終更新
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 |
+--------------------------------+