ST_ANGLE_SPHERE
描述
计算地球表面上两点之间的圆心角(单位为度)。输入参数依次为点 X 的经度、点 X 的纬度、点 Y 的经度、点 Y 的纬度。 圆心角是指地球球心处,连接两点的弧所对的角度。
语法
ST_ANGLE_SPHERE( <x_lng>, <x_lat>, <y_lng>, <y_lat>)
参数
参数 | 说明 |
---|---|
<x_lng> | 经度数据,类型为DOUBLE ,合理的取值范围是 [-180, 180] |
<y_lng> | 经度数据,类型为DOUBLE ,合理的取值范围是 [-180, 180] |
<x_lat> | 纬度数据,类型为DOUBLE ,合理的取值范围是 [-90, 90] |
<y_lat> | 纬度数据,类型为DOUBLE ,合理的取值范围是 [-90, 90] |
返回值
返回两点之间的圆心角,单位为度,类型为 DOUBLE,范围为 [0, 180]。
ST_ANGLE_SPHERE 存在以下边缘情况:
- 若任何输入参数为 NULL,返回 NULL。
- 若任何坐标超出范围(如经度 > 180、纬度 <-90),返回 NULL。
- 若两点为同一点(经纬度完全相同),返回 0。
- 若两点为对映点(地球上直径相对的点),返回 180。
举例
两个邻近点的圆心角计算
select ST_Angle_Sphere(116.35620117, 39.939093, 116.4274406433, 39.9020987219);
+---------------------------------------------------------------------------+
| st_angle_sphere(116.35620117, 39.939093, 116.4274406433, 39.9020987219) |
+---------------------------------------------------------------------------+
| 0.0659823452409903 |
+---------------------------------------------------------------------------+
赤道上经度差 45° 的两点
select ST_Angle_Sphere(0, 0, 45, 0);
+----------------------------------------+
| st_angle_sphere(0.0, 0.0, 45.0, 0.0) |
+----------------------------------------+
| 45 |
+----------------------------------------+
两点坐标完全相同
mysql> SELECT ST_ANGLE_SPHERE(30, 60, 30, 60);
+---------------------------------+
| ST_ANGLE_SPHERE(30, 60, 30, 60) |
+---------------------------------+
| 0 |
+---------------------------------+
对映点(直径相对的点)
mysql> SELECT ST_ANGLE_SPHERE(0, 0, 180, 0);
+-------------------------------+
| ST_ANGLE_SPHERE(0, 0, 180, 0) |
+-------------------------------+
| 180 |
+-------------------------------+
跨东西经度的两点(如 170°E 和 - 170°W)
mysql> SELECT ST_ANGLE_SPHERE(170, 30, -170, 30);
+------------------------------------+
| ST_ANGLE_SPHERE(170, 30, -170, 30) |
+------------------------------------+
| 17.298330210575152 |
+------------------------------------+
跨赤道的南北两点
mysql> SELECT ST_ANGLE_SPHERE(0, 45, 0, -45);
+--------------------------------+
| ST_ANGLE_SPHERE(0, 45, 0, -45) |
+--------------------------------+
| 89.99999999999999 |
+--------------------------------+
无效经度(超出范围)
mysql> SELECT ST_ANGLE_SPHERE(190, 30, 10, 30);
+----------------------------------+
| ST_ANGLE_SPHERE(190, 30, 10, 30) |
+----------------------------------+
| NULL |
+----------------------------------+
任意参数为 NULL
mysql> SELECT ST_ANGLE_SPHERE(NULL, 30, 10, 30);
+-----------------------------------+
| ST_ANGLE_SPHERE(NULL, 30, 10, 30) |
+-----------------------------------+
| NULL |
+-----------------------------------+
纬度超出范围(如 91°N)
mysql> SELECT ST_ANGLE_SPHERE(0, 0, 180, 91);
+--------------------------------+
| ST_ANGLE_SPHERE(0, 0, 180, 91) |
+--------------------------------+
| NULL |
+--------------------------------+