JPGGPSMODIFY/JPGGPSMAP for Widows(http://www.ksky.ne.jp/~yamama/jpggpsmap/manual.htm)
[ サンプル画像2 ]
■ ファイル先頭部の解析
先頭の256バイトです。
次の順で確認します。
●'Exif' 文字列の確認
まず先頭部に 'Exif' という文字列をチェックします。(ないかもしれない?)
●TIFF Header 確認
その後に
TIFF Header
があることを確認します。ない画像もあり、なければ GPS 情報もありません。
この先頭アドレス(本例では 0C H)がオフセット補正量になり、指定オフセット量はこの分だけ加えて絶対位置を計算しなければなりません。
TIFF Headerは8バイト構成でつぎのようになっています。
●0th IFD = Primary IFD データのチェック
エントリ先頭は 14Hで、ここからが IFD です。
●GPS タグの有無チェック
上のエントリ表の中に GPSタグ があることを確認する。(なければ GPS 情報はありません)
GPS タグの 2588H(リトルエンディアン)の有無をチェックする。
8EH から該当データの12バイトがあり、そのエントリの最終4バイトがGPS IFD へのオフセット(上例では 0294H)を取得する。
■ GPS情報の取得
先頭から512バイト目からの304バイトです。
2A0H (=294H+0CH) バイト目からGPS データがあります。
01H
(南北),
02H
(緯度),
03H
(東西),
04H
(経度),
12H
(測地系)です。
次の順で確認します。
●南北
タグ=01H のエントリでは、02H(ASCII 文字)の2バイトが指定されており、4FH='N'+ヌル がある。つまり北緯である。
●緯度
タグ=02H のエントリでは、05H(LONG,分数)が指定されており、オフセット 02E2H なので、実アドレスは 02E2H + 0CH = 2EEH である。
2EEH からの実データは、 23H(=35), 01H, 029H(=41),01H,1720H (=5920),64H(=100)である。→ 35/1度41/1分5920/100秒 or 35度41分59.20秒
●東西
タグ=03H のエントリでは、02(ASCII 文字)の2バイトが指定されており、45H='E' +ヌルがある。つまり東経である。
●経度
タグ=04H のエントリでは、05H(LONG,分数)が指定されており、オフセット 02FAH なので、実アドレスは 02FAH + 0CH = 306H である。
306H からの実データは、 8BH(=139), 01H, 2EH(=46),01H,0714H(=1812),64H(=100) である。→ 139/1度46/1分1812/100秒 or 139度46分18.12秒
●測地系
タグ=12H のエントリでは、02H(ASCII)の7バイトが指定されており、オフセット 0312H なので、実アドレスは 0312H + 0CH = 31EH である。
31EH からの実データは、 'WGS-84' の6文字+ヌルである。