『dms => degree変換』 『WGS84 <=>tokyo 変換』をperlで行う。

perlで携帯サイトを作るときに、GPS機能を使う場合もあるでしょう。
PGS情報はAPIとも連動させやすいですし、マッシュアップサイトを作るのも扱いやすい情報ですよね。


しかし、GPSは結構形式を覚えるまでが面倒です。


経度緯度の表記方法

  • dms表記
  • degree表記


測地系


このように、表記表にも測位系にも異なる形式が混在し、APIなどを使用する場合も適した形式に変換する必要があるのです。

便利な perl モジュール Geo::Coordinates::Converter

CPANには便利なモジュールがあるもので、欲しい機能はたいていすでに誰かが作っています。


このモジュールを使えば
dms <=> degree

WGS84 <=> tokyo
も思いのまま

でも、何らかの理由で使えない人のために・・・。

果たして需要があるのか・・・。


実は自分の場合は、レンタルサーバでコーディングしていたため、Geo::Coordinates::Converterをinstallすることができなかったため、使ったのですが。


もし同じような人がいれば、どうぞ

sub dms_to_degree{
    my ($dms) = @_;
    my ($degree, $min, $sec) = ($dms =~ /^\s*[+|-]{0,1}(\d+)\.(\d+)\.(\d+\.\d+)$/);
    my $dms2degree = $degree + $min/60 + $sec/3600;
    return sprintf "%.6f", $dms2degree;
}

sub wgs84_to_tokyo{
    my ($lat, $lon) = @_;
    return ($lat + 0.00010696*$lat - 0.000017467*$lat - 0.0046020,
        $lon + 0.000046047*$lon + 0.000083049*$lon - 0.010041);
}

sub tokyo_to_wgs84{
    my ($lat, $lon) = @_;
    return ($lat - 0.00010695*$lat + 0.000017464*$lat + 0.0046017,
        $lon - 0.000046038*$lon - 0.000083043*$lon + 0.010040);
}

degree_to_dms もあったはずだが、どっか消したっぽい。
いつか見つけたら、また公開します。