ホーム > 未分類 > JpegのExifから緯度経度を取得する

JpegのExifから緯度経度を取得する

2008 年 12 月 14 日 miya コメントをどうぞ コメント

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;
}
カテゴリー: 未分類 タグ:
  1. 2010 年 1 月 21 日 09:59 | #1

    こんにちは。
    大変参考になりました。ありがとうございます。

    一つだけ補足ですが、Exifの緯度経度は”39/1″のような分数(?)ですが、この分母は固定ではないようです。
    なので、$exif['GPSLatitude'][2]や$exif['GPSLongitude'][2]を360000(60×60×100)で割っていますが、分母が100でない場合に結果が違ってしまいます。
    分子と分母に分けて、計算してあげる必要があるようです。

    $exif['GPSLatitude'][0]や$exif['GPSLatitude'][1]については、自分の手元にある写真は全て分母が1ですが、同様に分子と分母に分けて計算してあげた方が無難なのかもしれません。

    以上、ご参考まで。

  2. miya
    2010 年 1 月 21 日 16:39 | #2

    @postoro
    ご指摘有難うございました。
    そのとおりですね。

    こちらでも、位置がずれることを確認しましたので、今晩あたり直しておきます。

  1. トラックバックはまだありません。