PostGISの2点間の方位を計算するにはどうすればよいですか?


19

PostGISの2つのポイント間の方位を見つけるにはどうすればよいですか?

メソッドが回転楕円体のベアリングを生成するか、平面ベアリングを生成するかどうかを回答で指定してください。

回答:


21

ST_Azimuthを使用する

平面方位は次を使用して計算できますST_Azimuth

SELECT ST_Azimuth(ST_MakePoint(1,2), 
           ST_MakePoint(3,4))/(2*pi())*360 as degAz,
       ST_Azimuth(ST_MakePoint(3,4), 
           ST_MakePoint(1,2))/(2*pi())*360 As degAzrev

degaz   degazrev
------  ---------
45      225

球面方位(Quoting potgis-usersグループ)の場合:

PostGISの方位関数は、単純なarctan関数を使用して方位を決定しているようです。座標を投影座標系に変換してからクエリを実行すると、結果はFCCサイトの結果にはるかに近くなります。
UTMゾーン31への簡単な変換を次に示します。

select degrees(azimuth(
'POINT(634714.442133176 5802006.052402816)',
'POINT(634731.2410598891 5801981.648284801)'
));

145.457858825445の方位角が得られます。UTMゾーンの中心にあるポイント、またはより適切な投影は、より良い結果をもたらします。

三角関数とST_distance_sphereの使用

これは、主にレガシーの理由で、この問題に対処しなければならなかったときに選択したソリューションです(方位角を計算するPython関数がありました)。まず、2点間の正確な距離を示す関数を見つける必要があります。postgisマニュアルを引用

ST_distance_sphere(point、point)2つの緯度/経度ポイント間の直線距離をメートル単位で返します。球状の地球と6370986メートルの半径を使用します。distance_spheroid()より高速ですが、精度は劣ります。ポイントに対してのみ実装されます。

ポイント間の経度と緯度の距離を測定し、arctan関数を使用して角度を取得します。


...私は、レガシーコードを見つけることができれば-私は、後にPythonのコードを投稿し、そしておそらく方法の間にいくつかの比較を行うようにするよ
アダムMatan

距離から角度への移動方法を明確にできますatanか?私の三角法は少しかすんでいます
...-fmark

11

現在この質問に出くわしている方のために-PostGISは、2.0.0の時点で地理(回転楕円体)のST_Azimuthをサポートしています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.