携帯電話で取った画像から、緯度・経度情報を抜き出してgoogle mapsにマーカーを付加したいと考えています。perlでimage::Exifを用いて抜き出してみましたが、緯度経度がどうもずれていたり(測地系:WGS-84)、「35 / 1 , 34 / 1 , 4240 / 100」といった形式で出力されています(度分秒?)。

google mapsに使用できるような情報を抜き出す方法を(perlで)具体的に教えてください。

よろしくお願いします。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2005/09/14 21:55:37
  • 終了:--

回答(1件)

id:thrillseeker No.1

thrillseeker回答回数328ベストアンサー獲得回数372005/09/15 04:03:51

ポイント50pt

Image::EXIF の vsersion 1.00.3 の場合、「N 35 / 1 , 34 / 1 , 4240 / 100」形式を

「N 35 34’ 4.24」形式に変換してくれるようです。


どの version でも動くよう、取り敢えず両方の形式に対応した

スクリプトを書いてみました。


#!/usr/bin/perl


use Image::EXIF;


die ”Usage: $0 file names...¥n” unless(@ARGV);


foreach $file (@ARGV)

{

my $url = ”http://maps.google.co.jp/maps?hl=ja&spn=0,0”;


my $exif = new Image::EXIF($file);

my $image_info = $exif->get_image_info();


my (%c,$nwse,$deg,$min,$sec);


foreach $axis ( (”Latitude”,”Longitude”) )

{

if ($image_info->{$axis} =~ /(¥w)¥s+(¥d+)[^¥d]+([¥d¥.]+)¥’¥s*([¥d¥.]+)*/)

{

# Output type: ”A DD MM’ [SS]”

($nwse,$deg,$min,$sec) = ($1,$2,$3,$4);

}

elsif ($image_info->{$axis} =~ /(¥w)¥s+(¥d+)¥/(¥d+)¥s+(¥d+)¥/(¥d+)¥s*(¥d+)*¥/*(¥d+)*/)

{

# Output type: ”A DD/N MM/N [SS/N]”

$nwse = $1;

$deg = $2/$3 if (0<$3);

$min = $4/$5 if (0<$5);

$sec = $6/$7 if (0<$7);

}

$c{$axis} = $deg + $min/60 + $sec/3600;

$c{$axis} = -$c{$axis} if ($nwse =~ /[SW]/i);

}

$url .= sprintf(”&ll=%s,%s”,$c{”Latitude”},$c{”Longitude”});

print ”[$file] $url¥n”;

}


なお位置ずれに関しては2番目のURLに情報がありました。


※回答画面では¥や”が全角に強制変換されてしまうようなので、

スクリプトをコピーペーストする時はご注意下さい。

http://d.hatena.ne.jp/twisted0517/20050722

ニヤリ@避難所 - 製作欲盛り上がりんぐ

コメントはまだありません

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません