名前

ST_Azimuth — pointAとPointBで定義されるベクタの、水平面での方位をラジアン単位で返します。方位は時計回りで、前半は下向き方向で後半は上向き方向になります。時計でいうと12=0; 3=PI/2; 6=PI; 9=3PI/4となります。

概要

float ST_Azimuth(geometry pointA, geometry pointB);

float ST_Azimuth(geography pointA, geography pointB);

説明

与えられたポイントジオメトリで定義される線分の方位を返し、2点が同位置にある場合はNULLを返します。返り値はラジアン単位です。方位は時計回りで、前半は下向き方向で後半は上向き方向になります。時計でいうと12=0; 3=PI/2; 6=PI; 9=3PI/4となります。

方位は基準面とポイントのあいたの角度(この場合はラジアン単位)と定義される数学的な概念です。

初出: 1.1.0

機能強化: 2.0.0では、ジオグラフィが導入されました。

ST_Azimuthは、ST_Translateと併用して、垂直軸に沿ってオブジェクトをシフトさせる場合に、特に便利です。これの例として、upgis_lineshift Plpgsqlfunctions PostGIS wiki sectionを参照して下さい。

度単位のジオメトリの方位

SELECT ST_Azimuth(ST_Point(25,45), ST_Point(75,100))/(2*pi())*360 as degAz,
	ST_Azimuth(ST_Point(75,100), ST_Point(25,45))/(2*pi())*360 As degAzrev;
	
-- ご注意: 度に関するPostgreSQL組み込み関数を使うと覚えやすいです。
-- 両方とも同じ答えです。
SELECT degrees( ST_Azimuth(ST_Point(25,45), ST_Point(75,100)) ) as degAz,
	degrees( ST_Azimuth(ST_Point(75,100), ST_Point(25,45)) ) As degAzrev;

      degaz       |     degazrev
------------------+------------------
 42.2736890060937 | 222.273689006094

degAzは行程(方位)、水平線(始点から初めて終点が落ちてきてほしい終点で終了)とポイント(始点:25,45は緑)です。

degAzrevは方位曲線、水平線(始点から初めて終点が落ちてきてほしい終点で終了)とポイント(始点:75,100は緑)

関連情報

ST_Point, ST_Translate