RMagickを使って画像Exif位置情報を10進値に変換

iPhoneやAndroid携帯で撮影した写真にはGPSによる位置情報を付けることができます。最近ではGPSに対応したデジタル一眼レフカメラも普通にあるようですしサービスを作る上で利用したいですね。

ImageMagickコマンドで確認

Exifの位置情報はどんな風に格納されているのかImageMagickを使って見てみましょう。

$ identify -verbose ~/Desktop/image.jpg  | grep itude
exif:GPSAltitude: 9509/501
exif:GPSAltitudeRef: 0
exif:GPSLatitude: 35/1, 3850/100, 0/1
exif:GPSLatitudeRef: N
exif:GPSLongitude: 139/1, 4497/100, 0/1
exif:GPSLongitudeRef: E

どうやら60進数の文字列として格納されてそうです。

#ちなみにこの位置は昨日のお昼ご飯のお弁当なので会社の場所です。うちじゃないですよ(笑)

Rubyでハンドリング

RailsからアクセスするとなるとRMagickを使うのが楽そうです。

Google Mapsなどを使って表示しようとすると10進のFloatの方が扱いやすそうですので変換してみます。緯度経度の値の中に文字列表記の除算が出てきますが、RubyにはRationalライブラリが含まれているのでFloatに変換する直前までRationalで行けば楽チンで誤差も最小限。

Google Mapsで確かめて見ましょう。


大きな地図で見る

iPhoneのGPSなので少しずれてますが10m程度でした。

おまけ

日本では必要ないはずですが、世界をにらんだサービスであればGPSLatitudeRefとGPSLongitudeRefも見て調整する必要があるようです。