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