almost 5 years ago

Exifとは

Exif は JPEG のメタデータの一種です。撮影時間や撮影したハードウェア、写真の傾き、GPS に基づく位置情報に関する情報を持つことができます。これらの情報をまとめてタグと呼ぶ場合があります。GPS に基づく位置情報に関する情報は特別にジオタグということもあります。

Exif を操作するには、Android では ExifInterface クラスを利用します。ExifInterface で扱える Exif タグは Android API のリファレンスで確認できます。

http://developer.android.com/reference/android/media/ExifInterface.html

ジオタグとは

ジオタグには緯度経度など位置情報に関する情報がいくつかあります。代表的なものは以下の四つでしょう。

緯度 GPSLatitude
経度 GPSLongitude
緯度が北緯か南緯 GPSLatitudeRef
経度が東経か西経 GPSLongitudeRef

この4種類を正しく扱うことで、Picasa や Twitpic などの画像共有サービスの地図上に写真の撮影位置を示すことができます。アプリケーションによっては、GPSMapDatum タグなど他のタグがないと地図に位置を表示しない場合もあるかもしれません。

GPSLatitude/GPSLongitude に緯度/経度を書き込むフォーマットは “num1/denom1,num2/denom2,num3/denom3″ です。つまり、単位付きの度分秒の形になります。GeoPoint の getLatitudeE6()/getLongitudeE6() は度分秒の形ではなく、度 * 1E6 の形になっています。

度から度分秒に変換するには、

double minute = (degree – (int) degree) * 60;
double second = (minute – (int) minute) * 60 * 10000000;
String formattedValue = String.format(“%d/1,%d/1,%d/10000000″, (int)degree, (int)minute, (int)second))

のような処理が必要です。分を求めるには、度から度の整数部で引いた数を 60 倍にします。秒を求めるには、分から分の整数部で引いた数を60倍にし、小数部はジオタグへ書き込めないので、要件にあわせた適当な数(精度を求めるなら大きい数)で倍にします。

GPSLatitudeRef は緯度がN(北緯)かS(南緯)かを区別するために使います。同じようにGPSLongitudeRefはE(東経) or W(西経)かを区別するために使います。

← 連絡先を取得する OrmLite - SQLiteに関する処理を簡潔にする →