PHPやJavaScriptなどの覚え書き、たまに愚痴、反省など。
JpegのExifから緯度経度を取得する
Jpegファイルのパスを引数として指定すると、Exifデータから緯度経度を取得します。
classにするほどでもないし、毎回探すのも面倒なので、ここに公開しておきます。
function exif2geo( $jpeg ){
if( !is_file($jpeg) ){
return false;
}
if( $exif = exif_read_data( $jpeg ) ) {
if( isset($exif['GPSLatitudeRef'])
&& isset($exif['GPSLatitude'])
&& isset($exif['GPSLongitudeRef'])
&& isset($exif['GPSLongitude']) ){
$lat_r = ($exif['GPSLatitudeRef'] == 'N') ? 1: -1;
$lat_1 = intval($exif['GPSLatitude'][0]);
$lat_2 = intval($exif['GPSLatitude'][1])/60;
$lat_3 = intval($exif['GPSLatitude'][2])/360000;
$lat = $lat_r * ($lat_1+$lat_2+$lat_3);
$lng_r = ($exif['GPSLongitudeRef'] == 'E') ? 1: -1;
$lng_1 = intval($exif['GPSLongitude'][0]);
$lng_2 = intval($exif['GPSLongitude'][1])/60;
$lng_3 = intval($exif['GPSLongitude'][2])/360000;
$lng = $lng_r * ($lng_1+$lng_2+$lng_3);
return array( $lat, $lng );
}
}
return false;
}
| この記事は miya によって 2008 年 12 月 14 日 2:10 AM に投稿されました, 未分類 以下に保存されています。 RSS 2.0 を通してコメントをフォローする。 コメントを残すか、ご自分のサイトからトラックバックできます。 |
トラックバックはありません。
Additional comments powered by BackType



about 6 months ago
こんにちは。
大変参考になりました。ありがとうございます。
一つだけ補足ですが、Exifの緯度経度は”39/1″のような分数(?)ですが、この分母は固定ではないようです。
なので、$exif['GPSLatitude'][2]や$exif['GPSLongitude'][2]を360000(60×60×100)で割っていますが、分母が100でない場合に結果が違ってしまいます。
分子と分母に分けて、計算してあげる必要があるようです。
$exif['GPSLatitude'][0]や$exif['GPSLatitude'][1]については、自分の手元にある写真は全て分母が1ですが、同様に分子と分母に分けて計算してあげた方が無難なのかもしれません。
以上、ご参考まで。
about 6 months ago
@postoro
ご指摘有難うございました。
そのとおりですね。
こちらでも、位置がずれることを確認しましたので、今晩あたり直しておきます。