=head1 名前 Location::GeoTool - 地理情報を扱うPerlモジュール =head1 概要 use Location::GeoTool; my $oGeo = Location::GeoTool->create_coord('35.39.24.491','139.40.10.478','tokyo','gpsone'); my @mapion = $oGeo->format_mapion->array; # => ("35/39/24.491","139/40/10.478") my $oGeoW = $oGeo->datum_wgs84; my @wgs84 = ($oGeoW->lat,$oGeoW->long); # => ("35.39.36.145","139.39.58.871") my @degree_wgs84 = $oGeoW->format_second; # => (128376.14524...,502798.87076...) =head1 説明 =head2 コンストラクタ (create_coord) my $obj = Location::GeoTool->create_coord($lat,$long,$datum,$format); Location::GeoToolオブジェクトを生成します。 $lat : 緯度 $long : 経度 $datum : 測地系 $format : フォーマット 作成されたオブジェクトのデフォルトの測地系、フォーマットは引数で指定したものになります。 よって、array,lat,longメソッド等で返ってくる値は、コンストラクタで指定したものと同じになります。 測地系は以下の文字列で与えてください。 世界(新日本)測地系 : 'wgs84' 旧日本測地系 : 'tokyo' フォーマットは、以下の文字列で与えてください。 MapionURLフォーマット (ddd/mm/ss.nnn) : 'mapion' gpsOne標準フォーマット(ddd.mm.ss.nnn) : 'gpsone' SpaceTagサーバ標準 (pddmmssnnn) : 'spacetag' dddmmss.nnn形式 : 'dmsn' 度単位 (ddd.dddddd...) : 'degree' 秒単位 (ssssss.sss...) : 'second' ラジアン単位 : 'radian' =head2 経緯度取得メソッド群 現在のオブジェクトの設定された測地系・フォーマットでの、経緯度の値を返します。 ($lat,$long) = $obj->array; or $lat = $obj->lat; $long = $obj->long; =head2 測地系・フォーマット変換メソッド群 新しい測地系・フォーマットに変換された、新オブジェクトを返します。 $newobj = $obj->datum_wgs84; $newobj = $obj->format_mapion; 等等。当然、以下のような事は可能です。 ($lat,$long) = $obj->datum_tokyo->format_radian->array; 準備されている全メソッドは、以下のとおりです。 世界(新日本)測地系へ変換: datum_wgs84 旧日本測地系へ変換: datum_tokyo MapionURLフォーマット(ddd/mm/ss.nnn)へ変換: format_mapion gpsOne標準フォーマット(ddd.mm.ss.nnn)へ変換: format_gpsone SpaceTagサーバ標準(pddmmssnnn)へ変換: format_spacetag dddmmss.nnn形式へ変換: format_dmsn 度単位(ddd.dddddddd…)へ変換:format_degree 秒単位(ssssss.sss…)へ変換: format_second ラジアン単位へ変換: format_radian 注意:変換されたオブジェクトは、実際には元測地系・フォーマットでの情報を保持し、 経緯度取得メソッド群が実行された時に、その時の設定測地系・フォーマットへの変換が 実際に実行されます。 これは、測地系・フォーマット変換とも誤差の大きい処理ですので、処理を繰り返す事で 実位置との誤差が大きくなる事を防ぐための仕様です。 ただし、Class::DBIとの連携等を考えた場合、どんな測地系・フォーマットの値を入れても 内部で規定の測地系・フォーマットに変換してくれた方が便利かな、というケースもあり ますので、この仕様は変更される可能性があります。 =head2 方向・距離処理メソッド群 現オブジェクトを起点とした、方向・距離を扱うLocation::GeoTool::Direction オブジェクトを生成するメソッド群です。 Location::GeoTool::Directionについては同クラスのpodを参照してください。 my $dirobj = $locobj->direction_point('40/36/14.307','141/01/33.022','tokyo','mapion'); my ($dir,$dist) = ($dirobj->direction,$dirobj->distance); or my $direction = $locobj->direction_point($another_locobj)->direction; or my ($endlat,$endlong) = $locobj->direction_vector($dir,$dist)->to_point->array; 等等。 =head3 direction_point 終点を指定して、Location::GeoTool::Directionオブジェクトを作成します。 指定には、 $locobj->direction_point($lat,$long,$datum,$format); のように終点の経緯度・測地系・フォーマットを使用する方法、 及び他のLocation::GeoToolオブジェクトを使用する方法 $locobj->direction_point($another_locobj); の双方が可能です。 =head3 direction_vector 方向・距離を指定してLocation::GeoTool::Directionオブジェクトを作成します。 $locobj->direction_point($direction,$distance); 方向は北を0°として東方向周りに0°〜360°の方位角、距離はmで指定します。 =head1 依存 Math::Trig =head1 関連情報 経緯度2点〜距離・方向の双方向変換導出アルゴリズムは、 http://williams.best.vwh.net/gccalc.htmにおいて、 Ed Williams氏がJavaScriptで実装されているものを移植しました。 測地系変換の導出アルゴリズムは、 http://homepage3.nifty.com/Nowral/02_DATUM/Molodensky.htmlにおいて、 Nowral氏がPerl CGIで実装されているものを移植しました。 これらのサイトに感謝いたします。 このモジュールは、ここギコ!ウェブサイト : http://kokogiko.net/ にてサポートいたします。 =head1 作者 大塚 恒平, Enene@kokogiko.netE =head1 著作権・ライセンス Copyright (C) 2003,2004 SpaceTag Inc., 本ライブラリはフリーソフトであり、Perl本体と同じ条件での再配布・改変が可能です。 =cut