Последнее обновление
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 |
+--------------------------------+