他のバージョンの文書 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

F.13. earthdistance

earthdistanceは地表面上の大圏距離を計算する、2つの異なる方式を提供します。 最初に説明する方式はcubeモジュールに依存します。 2番目の方式は、座標系として緯度経度を使用した、組み込みのpointデータ型を基にしたものです。

このモジュールでは地球は完全な球体であると仮定します。 (この精度が不十分な場合は、PostGISプロジェクトを参照することを勧めます。)

cubeモジュールはearthdistanceをインストールする前にインストールしなければなりません(一つのコマンドで両方をインストールするためにCREATE EXTENSIONCASCADEオプションを使うこともできますが)。

注意

earthdistancecubeは同じスキーマにインストールし、そのスキーマは信頼できないユーザにCREATE権限を許可していないし、今後も許可することのないものとすることを強く勧めます。 さもないと、earthdistanceのスキーマが悪意のあるユーザにより定義されたオブジェクトを含んでいた場合に、インストール時のセキュリティ問題になります。 さらに、インストール後にearthdistanceの関数を使う時には、サーチパス全体には信頼するスキーマだけが含まれるようにすべきです。

F.13.1. cubeを基にした地表距離

地球中心からのx、y、z距離をあらわす3次元を使用した点(両隅が同じ)であるcubeとして、データは格納されます。 cube上にearthドメインが提供されます。 これには、値がこれら制限を満たすか、また値が理論的に実際の地表面に近いかどうかの整合性検査を含みます。

地球の半径はearth()関数から入手されます。 この単位はメートルです。 しかしこの1つの関数を変更することで、何らかの他の単位を使用するようにしたり、より適切と考える別の半径を使用したりするようにこのモジュールを変更することができます。

このパッケージは天文学データベースへの応用もあります。 天文学者はおそらく距離が度単位になるように、earth()180/pi()の半径を返すものと変更したいでしょう。

緯度経度(度単位)の入力をサポート、緯度経度の出力をサポート、2点間の大圏距離を計算、インデックス検索に使用可能な簡単に外接矩形を指定するための関数が提供されます。

提供されている関数は表 F.5に示されています。

表F.5 cubeを基にしたearthdistanceの関数

関数

説明

earth () → float8

地球の想定半径を返します。

sec_to_gc ( float8 ) → float8

地表の2点間の通常の直線(割線)距離を大圏距離に変換します。

gc_to_sec ( float8 ) → float8

地表の2点間の大圏距離を通常の直線(割線)距離に変換します。

ll_to_earth ( float8, float8 ) → earth

度単位で指定された緯度(第1引数)と経度(第2引数)に対する地表位置を返します。

latitude ( earth ) → float8

地表上の点の緯度を度単位で返します。

longitude ( earth ) → float8

地表上の点の経度を度単位で返します。

earth_distance ( earth, earth ) → float8

地表上の2点間の大圏距離を返します。

earth_box ( earth, float8 ) → cube

位置から指定した大圏距離内の点に対するcube@>演算子を使用するインデックス検索に適した矩形を返します。 矩形内の点の一部は指定した大圏距離の外部にあります。 このため、earth_distanceを使用した第2の検査を問い合わせに含めなければなりません。


F.13.2. pointを基にした地表距離

このモジュールの第2部分はpoint型の値として地球上の位置を表現することに依存します。 ここで第1要素は経度を度単位で、第2要素は緯度を度単位で表現していると見なします。 直感的に経度はX軸、緯度はY軸という考えがより合うため、点は(経度, 緯度)として見なされますが、逆には見なされません。

表 F.6に示されている1つの演算子が提供されます。

表F.6 pointを基にしたearthdistanceの演算子

演算子

説明

point <@> pointfloat8

法定マイル単位の地表の2点間の距離を計算します。


このモジュールのcubeを基にした場合と異なり、ここでの単位はコード内に固定で記載されることに注意してください。 earth()関数を変更しても、この演算子の結果には影響しません。

緯度経度表現の1つの欠点は、極近辺と経度±180度近辺の限界条件に注意する必要があることです。 cubeを基にした表現ではこうした不連続性を防止できます。