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

ST_ANGLE

Описание​

На вход подаются три точки. Первая прямая соединяет point1 (первую конечную точку) и point2 (вторую конечную точку). Вторая прямая соединяет point2 (первую конечную точку) и point3 (вторую конечную точку). Эти две прямые пересекаются в point2. Функция возвращает угол от первой прямой ко второй, измеренный по часовой стрелке. Для каждой конечной точки значение координаты x (долготы) должно находиться в диапазоне [-180, 180], а значение координаты y (широты) должно находиться в диапазоне [-90, 90].

Синтаксис​

ST_ANGLE( <point1>, <point2>, <point3>)

Параметры​

ПараметрыОписание
<point1>Первая конечная точка первой прямой, тип GeoPoint
<point2>Вторая конечная точка первой прямой и первая конечная точка второй прямой, тип GeoPoint
<point3>Вторая конечная точка второй прямой, тип GeoPoint

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

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

Для ST_ANGLE предусмотрены следующие особые случаи:

  • Возвращает NULL, если point2 и point3 совпадают.
  • Возвращает NULL, если point2 и point1 совпадают.
  • Возвращает NULL, если point2 и point3 являются точными антиподами.
  • Возвращает NULL, если point2 и point1 являются точными антиподами.
  • Возвращает NULL, если координаты любой точки выходят за указанные диапазоны для x (долготы) или y (широты).
  • Возвращает NULL, если любая из входных точек равна NULL.

Пример​

SELECT ST_Angle(ST_Point(1, 0),ST_Point(0, 0),ST_Point(0, 1));

Угол от первой прямой ко второй, измеренный по часовой стрелке, составляет 4.7 радиана.

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

Угол от первой прямой ко второй, измеренный по часовой стрелке, составляет 0.78 радиана.

+----------------------------------------------------------------------+
| st_angle(st_point(0.0, 0.0), st_point(1.0, 0.0), st_point(0.0, 1.0)) |
+----------------------------------------------------------------------+
| 0.78547432161873854 |
+----------------------------------------------------------------------+
SELECT ST_Angle(ST_Point(1, 0),ST_Point(0, 0),ST_Point(1, 0));

Две прямые совпадают, поэтому угол по часовой стрелке равен 0.

+----------------------------------------------------------------------+
| st_angle(st_point(1.0, 0.0), st_point(0.0, 0.0), st_point(1.0, 0.0)) |
+----------------------------------------------------------------------+
| 0 |
+----------------------------------------------------------------------+

point2 и point3 совпадают, поэтому возвращается NULL.

SELECT ST_Angle(ST_Point(1, 0),ST_Point(0, 0),ST_Point(0, 0));
+----------------------------------------------------------------------+
| st_angle(st_point(1.0, 0.0), st_point(0.0, 0.0), st_point(0.0, 0.0)) |
+----------------------------------------------------------------------+
| NULL |
+----------------------------------------------------------------------+

Две прямые имеют антиподальные направления, поэтому возвращается NULL.

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

Если любая из точек равна NULL, возвращается NULL.

mysql> SELECT ST_Angle(NULL,ST_Point(-30, 0),ST_Point(-150, 0)) ;
+---------------------------------------------------+
| ST_Angle(NULL,ST_Point(-30, 0),ST_Point(-150, 0)) |
+---------------------------------------------------+
| NULL |
+---------------------------------------------------+

Если любая из координат выходит за указанный диапазон, возвращается NULL.


mysql> SELECT ST_Angle(ST_Point(0, 0),ST_Point(-30, 0),ST_Point(180, 91));
+-------------------------------------------------------------+
| ST_Angle(ST_Point(0, 0),ST_Point(-30, 0),ST_Point(180, 91)) |
+-------------------------------------------------------------+
| NULL |
+-------------------------------------------------------------+

Если любая из координат равна NULL, возвращается NULL.

mysql> SELECT ST_Angle(NULL,ST_Point(-30, 0),ST_Point(150, 90));
+---------------------------------------------------+
| ST_Angle(NULL,ST_Point(-30, 0),ST_Point(150, 90)) |
+---------------------------------------------------+
| NULL |
+---------------------------------------------------+