メインコンテンツまでスキップ
に最終更新

ST_ANGLE_SPHERE

説明​

地球の表面上にある二点間の中心角を度単位で計算します。入力パラメータは順に、点Xの経度、点Xの緯度、点Yの経度、点Yの緯度です。

中心角とは、二点を結ぶ弧に対して地球の中心でなす角を指します。

構文​

ST_ANGLE_SPHERE( <x_lng>, <x_lat>, <y_lng>, <y_lat>)

パラメータ​

パラメータ説明
<x_lng>点Xの経度。型は DOUBLE、有効範囲は [-180, 180]
<x_lat>点Xの緯度。型は DOUBLE、有効範囲は [-90, 90]
<y_lng>点Yの経度。型は DOUBLE、有効範囲は [-180, 180]
<y_lat>点Yの緯度。型は 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° と西経 170°)

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°)

mysql> SELECT ST_ANGLE_SPHERE(0, 0, 180, 91);
+--------------------------------+
| ST_ANGLE_SPHERE(0, 0, 180, 91) |
+--------------------------------+
| NULL |
+--------------------------------+