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