[ サンプル画像1 ]
■ ファイル先頭部の解析
先頭の256バイトです。
次の順で確認します。
●'Exif' 文字列の確認
まず先頭部に 'Exif' という文字列をチェックします。(ないかもしれない?)
●TIFF Header 確認
その後に
TIFF Header
があることを確認します。ない画像もあり、なければ GPS 情報もありません。
この先頭アドレス(本例では 1E H)がオフセット補正量になり、指定オフセット量はこの分だけ加えて絶対位置を計算しなければなりません。
TIFF Headerは8バイト構成でつぎのようになっています。
●0th IFD = Primary IFD データのチェック
エントリ先頭は 26Hで、ここからが IFD です。
●GPS タグの有無チェック
上のエントリ表の中に GPSタグ があることを確認する。(なければ GPS 情報はありません)
GPS タグの8825H(ビッグエンディアン)もしくは 2588H(リトルエンディアン)の有無をチェックする。
あれば、そのエントリの最終4バイトがGPS IFD へのオフセット(上例では 0240H)を取得する。
■ GPS情報の取得
先頭から512バイト目からの256バイトです。
25EH (=240H+1EH) バイト目からGPS データがあります。
01H
(南北),
02H
(緯度),
03H
(東西),
04H
(経度),
07H
(GPS時間)です。
次の順で確認します。
●南北(国内ではチェック不要だが?)
タグ=01H のエントリでは、02H(ASCII 文字)の2バイトが指定されており、4FH='N'+ヌル がある。つまり北緯である。
●緯度
タグ=02H のエントリでは、05H(LONG,分数)が指定されており、オフセット 0282H なので、実アドレスは 0282H + 1EH = 2A0H である。
2A0H からの実データは、 23H(=35), 01H, 0CE6H(=3302),64H(=100),00H,01H である。→ 35/1度3302/100分 or 35度32.02分 or 35度32分 1秒(0.02*60=1.2)
●東西(国内ではチェック不要だが?)
タグ=03H のエントリでは、02H(ASCII 文字)の2バイトが指定されており、45H='E'+ヌル がある。つまり東経である。
●経度
タグ=04H のエントリでは、05H(LONG,分数)が指定されており、オフセット 029AH なので、実アドレスは 029AH + 1EH = 2B8H である。
2B8H からの実データは、 8BH(=139), 01H, 0A4EH(=2638),64H(=100),00H,01H である。→ 139/1度2638/100分 or 139度26.38分 or 139度26分23秒(0.38*60=22.8)
●GPS 時間
タグ=07H のエントリでは、05H(LONG,分数)が指定されており、オフセット 02B2H なので、実アドレスは 02B2H + 1EH = 2D0H である。
2D0H からの実データは、 05H, 01H, 01H, 01H, 16F1H,64H である。→ 5/1時 01/01分 5873/100分 or 5時 1分 58秒