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

ST_ANGLE_SPHERE

Описание​

Вычисляет центральный угол (в градусах) между двумя точками на поверхности Земли. Входные параметры указываются в следующем порядке: долгота точки X, широта точки X, долгота точки Y и широта точки Y.

Центральным называется угол с вершиной в центре Земли, который опирается на дугу, соединяющую две точки.

Синтаксис​

ST_ANGLE_SPHERE( <x_lng>, <x_lat>, <y_lng>, <y_lat>)

Параметры​

параметрыописание
<x_lng>Долгота точки X, тип DOUBLE, допустимый диапазон: [-180, 180]
<x_lat>Широта точки X, тип DOUBLE, допустимый диапазон: [-90, 90]
<y_lng>Долгота точки Y, тип DOUBLE, допустимый диапазон: [-180, 180]
<y_lat>Широта точки Y, тип DOUBLE, допустимый диапазон: [-90, 90]

Возвращаемое значение​

Возвращает центральный угол между двумя точками в градусах в виде значения типа DOUBLE в диапазоне [0, 180].

Особые случаи для ST_ANGLE_SPHERE:

  • Если хотя бы один входной параметр равен NULL, возвращает NULL.
  • Если хотя бы одна координата выходит за допустимый диапазон (например, долгота > 180, широта < -90), возвращает NULL.
  • Если две точки совпадают (имеют одинаковую долготу и широту), возвращает 0.
  • Если две точки антиподальны (расположены на диаметрально противоположных сторонах Земли), возвращает 180.

Пример​

Вычисление центрального угла между двумя близко расположенными точками

select ST_Angle_Sphere(116.35620117, 39.939093, 116.4274406433, 39.9020987219);
+---------------------------------------------------------------------------+
| st_angle_sphere(116.35620117, 39.939093, 116.4274406433, 39.9020987219) |
+---------------------------------------------------------------------------+
| 0.0659823452409903 |
+---------------------------------------------------------------------------+

Две точки на экваторе с разницей долгот 45°

select ST_Angle_Sphere(0, 0, 45, 0);
+----------------------------------------+
| st_angle_sphere(0.0, 0.0, 45.0, 0.0) |
+----------------------------------------+
| 45 |
+----------------------------------------+

Две точки с одинаковыми координатами


mysql> SELECT ST_ANGLE_SPHERE(30, 60, 30, 60);
+---------------------------------+
| ST_ANGLE_SPHERE(30, 60, 30, 60) |
+---------------------------------+
| 0 |
+---------------------------------+

Антиподальные точки (диаметрально противоположные)

mysql> SELECT ST_ANGLE_SPHERE(0, 0, 180, 0);
+-------------------------------+
| ST_ANGLE_SPHERE(0, 0, 180, 0) |
+-------------------------------+
| 180 |
+-------------------------------+

Две точки с восточной и западной долготой (например, 170°E и -170°W)

mysql> SELECT ST_ANGLE_SPHERE(170, 30, -170, 30);
+------------------------------------+
| ST_ANGLE_SPHERE(170, 30, -170, 30) |
+------------------------------------+
| 17.298330210575152 |
+------------------------------------+

Две точки по разные стороны экватора (с северной и южной широтой)

mysql> SELECT ST_ANGLE_SPHERE(0, 45, 0, -45);
+--------------------------------+
| ST_ANGLE_SPHERE(0, 45, 0, -45) |
+--------------------------------+
| 89.99999999999999 |
+--------------------------------+

Некорректная долгота (вне допустимого диапазона)

mysql> SELECT ST_ANGLE_SPHERE(190, 30, 10, 30);
+----------------------------------+
| ST_ANGLE_SPHERE(190, 30, 10, 30) |
+----------------------------------+
| NULL |
+----------------------------------+

Один из параметров равен NULL

mysql> SELECT ST_ANGLE_SPHERE(NULL, 30, 10, 30);
+-----------------------------------+
| ST_ANGLE_SPHERE(NULL, 30, 10, 30) |
+-----------------------------------+
| NULL |
+-----------------------------------+

Широта вне допустимого диапазона (например, 91°N)

mysql> SELECT ST_ANGLE_SPHERE(0, 0, 180, 91);
+--------------------------------+
| ST_ANGLE_SPHERE(0, 0, 180, 91) |
+--------------------------------+
| NULL |
+--------------------------------+