鵺さんコメントありがとうございます。
02 DATUMGPSで得た現在位置を地図の上で見てみたら、居るはずの所から500mくらいずれてた、と言う経験はありませんか? これは測地系の違いから起こることです
なるほど、直交座標と楕円体座標変換なんですね。
そして面倒くさがりな私は結果的にYappoLogs: Geo::Coordinates::Converter - 緯度経度を簡単に変換する
を使わせてもらいました。一番大変だったのがインストールっていう・・・(^^;
素直に
# perl -e shell -MCPAN
cpan> install Geo:: Coordinates::Converter
が良さそうです。途中はまって色々と入れたような気がしますが覚えてません(^^;
以下コード。
#!/usr/bin/perl -w use Image::ExifTool 'ImageInfo'; use Geo::Coordinates::Converter; my $file = shift or die "Please specify filename"; my $info = ImageInfo($file); my $GPSPosition = $info->{GPSPosition}; my $datum = $info->{GPSMapDatum}; if( defined $GPSPosition ){ #35 deg 40' 21.90" N, 139 deg 43' 27.37" E $GPSPosition =~ s/^(\d*) deg (\d*)\' ([0-9\.]*)\" N, (\d*) deg (\d*)\' ([0-9\.]*)\" E$/ $1 $2 $3 $4 $5 $6/; my @val = split( / /, $GPSPosition ); my $lat = $val[0] + $val[1] / 60.0 + $val[2] / 3600.0; my $long = $val[3] + $val[4] / 60.0 + $val[5] / 3600.0; if( $datum eq "TOKYO" ){ my $geo = Geo::Coordinates::Converter->new( lat=> $lat, lng => $long, datum => 'tokyo' ); my $point = $geo->convert( wgs84 ); $lat = $point->lat; $long = $point->lng; } print "<a href=\"http://maps.google.co.jp/maps?q=", $lat, "," , $long, "&z=16\">Google Map</a>\n"; }
GNUE(鵺)
さすが CPAN、なんでも揃ってますね。
個人的にはそのうち使うことがあるだろうと C言語で書き直しちゃいました(笑)
ただ楕円体座標⇒直交座標⇒楕円体座標だと実際の値とは誤差があるんですよね。厳密に変換しようとすると国土地理院が配布していメッシュ毎の変換パラメータを使ってバイリニア補完をする必要があるようです。