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

ST_AZIMUTH

説明​

地球表面上の二つの点の間の方位角をラジアン単位で計算します。方位角は、始点(点 1)から真北に向かう線と両点を結ぶ線がなす角度で、時計回りに測定します。

方位角は、ある点から別の点への方向を表すために、ナビゲーションや地理情報システム(GIS)で広く使用されます。

構文​

ST_AZIMUTH( <point1>, <point2>)

パラメータ​

パラメータ説明
<point1>GeoPoint 型の始点。方位角を計算する際の基準点です。
<point2>GeoPoint 型の終点。始点に対する方向を計算します。

戻り値​

両点間の方位角をラジアン単位で返します。値の範囲は [0, 2π) です。方位角は真北から時計回りに測定され、各方向に対応する値は次のとおりです。

  • 真北:0 ラジアン
  • 真東:π/2 ラジアン(約 1.5708)
  • 真南:π ラジアン(約 3.1416)
  • 真西:3π/2 ラジアン(約 4.7124)

ST_AZIMUTH の境界条件は次のとおりです。

  • 入力された両点が同一(経度と緯度が同じ)の場合、NULL を返します。
  • 入力された両点が対蹠点(地球上で正反対の位置にある点)の場合、NULL を返します。
  • 入力された地理オブジェクトのいずれかが単一の点ではない場合、または空の地理オブジェクトである場合、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 |
+----------------------------------------------------------------------+