中井技術工房 Jpeg-GPS 情報解析テク トップ > Exifテク トップ > ここ

GPS 情報取得例1
サンプル画像

次のところからピックアップしたサンプル画像から GPS 情報を取り出してみます。

Exif情報の恐怖!個人情報を守るには(iPhone・Android・デジカメ)(http://chiraura.appcard.jp/show/f26dc8d4f1ce9d3a3690758cff437807)


[ サンプル画像1 ]



ファイル先頭部の解析

先頭の256バイトです。



次の順で確認します。

●'Exif' 文字列の確認

まず先頭部に 'Exif' という文字列をチェックします。(ないかもしれない?)

●TIFF Header 確認

その後に TIFF Header があることを確認します。ない画像もあり、なければ GPS 情報もありません。

この先頭アドレス(本例では 1E H)がオフセット補正量になり、指定オフセット量はこの分だけ加えて絶対位置を計算しなければなりません。

TIFF Headerは8バイト構成でつぎのようになっています。

先頭2バイト−− 'MM' (4DH,4DH,ビッグエンディアン=モトローラ方式) か 'II'(49H,49H,リトルエンディアン=インテル方式)
次の2バイト−− 00,2AH (ビッグエンディアン)か 2AH,00H (リトルエンディアン)で固定。
次の4バイト−− 最初のIFD へのポインタ(TIFF Header からのずれバイト数)
ビッグエンディアンのときは、2バイト以上の数字が16進で上位桁から下位桁の順で数字が並んでおり、リトルエンディアンならその逆配置になっています。
たとえば、( 49,49,00,2A,00,00,00,08 ) は、リトルエンディアンなら (4D,4D,2A,00,08,00,00,00) になっっています。

本例では、IFD ポインタ値=08H ですが、実際には 08H + 1EH = 26H から実データがあります。

●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(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秒


トップ > Exifテク トップ> 頁トップ