Перейти к содержимому
Последнее обновление

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