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

ST_AZIMUTH

Описание​

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

Азимут широко используется в навигации и геоинформационных системах (GIS) для обозначения направления от одной точки к другой.

Синтаксис​

ST_AZIMUTH( <point1>, <point2>)

Параметры​

ПараметрОписание
<point1>Начальная точка типа GeoPoint, служащая опорной точкой для вычисления азимута.
<point2>Конечная точка типа GeoPoint, для которой вычисляется направление относительно начальной точки.

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

Возвращает азимут между двумя точками в радианах в диапазоне [0, 2π). Азимут отсчитывается по часовой стрелке от направления на истинный север. Значения для основных направлений:

  • Истинный север: 0 радиан
  • Истинный восток: π/2 радиан (приблизительно 1.5708)
  • Истинный юг: π радиан (приблизительно 3.1416)
  • Истинный запад: 3π/2 радиан (приблизительно 4.7124)

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

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

Пример​

Точно на запад (из (1,0) в (0,0))

SELECT st_azimuth(ST_Point(1, 0),ST_Point(0, 0));
+----------------------------------------------------+
| st_azimuth(st_point(1.0, 0.0), st_point(0.0, 0.0)) |
+----------------------------------------------------+
| 4.71238898038469 |
+----------------------------------------------------+

Точно на восток (из (0,0) в (1,0))

SELECT st_azimuth(ST_Point(0, 0),ST_Point(1, 0));
+----------------------------------------------------+
| st_azimuth(st_point(0.0, 0.0), st_point(1.0, 0.0)) |
+----------------------------------------------------+
| 1.5707963267948966 |
+----------------------------------------------------+

Точно на север (из (0,0) в (0,1))

SELECT st_azimuth(ST_Point(0, 0),ST_Point(0, 1));
+----------------------------------------------------+
| st_azimuth(st_point(0.0, 0.0), st_point(0.0, 1.0)) |
+----------------------------------------------------+
| 0 |
+----------------------------------------------------+

Антиподальные точки

SELECT st_azimuth(ST_Point(-30, 0),ST_Point(150, 0));
+--------------------------------------------------------+
| st_azimuth(st_point(-30.0, 0.0), st_point(150.0, 0.0)) |
+--------------------------------------------------------+
| NULL |
+--------------------------------------------------------+

Направление на северо-восток (из (0,0) в (1,1))

mysql> SELECT st_azimuth(ST_Point(0, 0), ST_Point(1, 1));
+--------------------------------------------+
| st_azimuth(ST_Point(0, 0), ST_Point(1, 1)) |
+--------------------------------------------+
| 0.7854743216187384 |
+--------------------------------------------+

Направление на восток с пересечением меридиана 180° (из (170, 0) в (-170, 0))

mysql> SELECT st_azimuth(ST_Point(170, 0), ST_Point(-170, 0));
+-------------------------------------------------+
| st_azimuth(ST_Point(170, 0), ST_Point(-170, 0)) |
+-------------------------------------------------+
| 1.5707963267948966 |
+-------------------------------------------------+

При входных данных неточечного типа возвращается NULL


mysql> SELECT st_azimuth(ST_LineFromText("LINESTRING (0 0, 1 1)"), ST_Point(1, 0));
+----------------------------------------------------------------------+
| st_azimuth(ST_LineFromText("LINESTRING (0 0, 1 1)"), ST_Point(1, 0)) |
+----------------------------------------------------------------------+
| NULL |
+----------------------------------------------------------------------+