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