メインコンテンツまでスキップ
バージョン: 4.x

ST_AZIMUTH

デスクリプション

地球表面上の2点間の方位角(ラジアン単位)を計算します。方位角は、開始点(点1)における真北方向線から2点を結ぶ線までの角度を、時計回りに測定したものです。

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

Sytax

ST_AZIMUTH( <point1>, <point2>)

パラメータ

Parameterデスクリプション
<point1>方位角計算の基準点となる開始点。GeoPoint 型。
<point2>開始点に対する相対的な方向を計算する終了点。GeoPoint 型。

戻り値

2点間の方位角をラジアンで返します。範囲は [0, 2π) です。方位角は真北から時計回りに測定され、特定の方向対応は以下の通りです:

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

ST_AZIMUTH のエッジケース:

  • 2つの入力点が同一の場合(同じ経度と緯度)、NULL を返します。
  • 2つの入力点が対蹠点の場合(地球上で正反対の位置)、NULL を返します。
  • 入力された地理的位置が単一点でない場合、または空の地理的オブジェクトの場合、NULL を返します。

Example

真西 ((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 |
+----------------------------------------------------------------------+