ST_AZIMUTH
描述
计算地球球面上两点之间的方位角(单位为弧度)。方位角是从起点(点 1)的真北方向线开始,顺时针旋转到两点连线的角度。
方位角广泛用于导航和地理信息系统中,表示从一点到另一点的方向。
语法
ST_AZIMUTH( <point1>, <point2>)
参数
参数 | 说明 |
---|---|
<point1> | 起点,类型为 GeoPoint,用于计算方位角的基准点 |
<point2> | 终点,类型为 GeoPoint,需要计算相对于起点的方向 |
返回值
返回两点之间的方位角,单位为弧度,范围为 [0, 2π)。方位角按顺时针方向从真北开始测量,具体方向对应关系:
- 正北方:0 弧度
- 正东方:π/2 弧度(约 1.5708)
- 正南方:π 弧度(约 3.1416)
- 正西方:3π/2 弧度(约 4.7124)
ST_Azimuth 存在以下边缘情况:
- 若两点为同一点(经纬度完全相同),返回 NULL(方向无意义)。
- 若两点为对映点(地球直径两端的点),返回 NULL(存在两个可能方向,无法唯一确定)。
- 若输入参数不是 GeoPoint 类型(如线、多边形),或为空几何对象,返回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 |
+----------------------------------------------------------------------+