earthdistance
は地表面上の大圏距離を計算する、2つの異なる方式を提供します。
最初に説明する方式はcube
モジュールに依存します。
2番目の方式は、座標系として緯度経度を使用した、組み込みのpoint
データ型を基にしたものです。
このモジュールでは地球は完全な球体であると仮定します。 (この精度が不十分な場合は、PostGISプロジェクトを参照することを勧めます。)
cube
モジュールはearthdistance
をインストールする前にインストールしなければなりません(一つのコマンドで両方をインストールするためにCREATE EXTENSION
のCASCADE
オプションを使うこともできますが)。
earthdistance
とcube
は同じスキーマにインストールし、そのスキーマは信頼できないユーザにCREATE権限を許可していないし、今後も許可することのないものとすることを強く勧めます。
さもないと、earthdistance
のスキーマが悪意のあるユーザにより定義されたオブジェクトを含んでいた場合に、インストール時のセキュリティ問題になります。
さらに、インストール後にearthdistance
の関数を使う時には、サーチパス全体には信頼するスキーマだけが含まれるようにすべきです。
地球中心からのx、y、z距離をあらわす3次元を使用した点(両隅が同じ)であるcubeとして、データは格納されます。
cube
上にearth
ドメインが提供されます。
これには、値がこれら制限を満たすか、また値が理論的に実際の地表面に近いかどうかの整合性検査を含みます。
地球の半径はearth()
関数から入手されます。
この単位はメートルです。
しかしこの1つの関数を変更することで、何らかの他の単位を使用するようにしたり、より適切と考える別の半径を使用したりするようにこのモジュールを変更することができます。
このパッケージは天文学データベースへの応用もあります。
天文学者はおそらく距離が度単位になるように、earth()
が180/pi()
の半径を返すものと変更したいでしょう。
緯度経度(度単位)の入力をサポート、緯度経度の出力をサポート、2点間の大圏距離を計算、インデックス検索に使用可能な簡単に外接矩形を指定するための関数が提供されます。
提供されている関数は表 F.5に示されています。
表F.5 cubeを基にしたearthdistanceの関数
このモジュールの第2部分はpoint
型の値として地球上の位置を表現することに依存します。
ここで第1要素は経度を度単位で、第2要素は緯度を度単位で表現していると見なします。
直感的に経度はX軸、緯度はY軸という考えがより合うため、点は(経度, 緯度)として見なされますが、逆には見なされません。
表 F.6に示されている1つの演算子が提供されます。
表F.6 pointを基にしたearthdistanceの演算子
演算子 説明 |
---|
法定マイル単位の地表の2点間の距離を計算します。 |
このモジュールのcube
を基にした場合と異なり、ここでの単位はコード内に固定で記載されることに注意してください。
earth()
関数を変更しても、この演算子の結果には影響しません。
緯度経度表現の1つの欠点は、極近辺と経度±180度近辺の限界条件に注意する必要があることです。
cube
を基にした表現ではこうした不連続性を防止できます。