無料スクリプト配布のPHP.TO   PHPの実用的なtips PHPマニュアル MySQLマニュアル Apacheマニュアル PostgreSQLマニュアル マニュアル検索    

F.13. earthdistance

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

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

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

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

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

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

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

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

表 F-4. 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-5 に示されている1つの演算子が提供されます。

表 F-5. Pointを基にしたearthdistanceの演算子

演算子 戻り値 説明
point <@> point float8 法定マイル単位の地表の2点間の距離を返します。

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

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


powered by SEO.CUG.NET