普段はRailsで開発を行っております。
その際、位置情報の取得において意外な箇所でハマってしまったので作成したコードの備忘録?注意喚起?として残しておきます。
GPS情報が取得できない状況だけ見たい方は、GPSが取得できなかった
まで読み飛ばして下さい。
早速、ターミナル内で位置情報の確認作業を行ってみます。
コードをコピペでも動きます。
環境:
Ruby2.6.6
ImageMagick 7.0.10-34
Rubyファイルを作成
今回はgps_test
というディレクトリ内にmain.rb
ファイルを作成しました。
次に以降のコードを記述します。
require 'rmagick'
img = Magick::ImageList.new(File.expand_path('~/Downloads/画像データ名'))
p img
p img.get_exif_by_entry('GPSLatitude')
# 緯度:10進数に変換して出力
exif_lat = img.get_exif_by_entry('GPSLatitude')[0][1].split(',').map(&:strip)
latitude = (Rational(exif_lat[0]) + Rational(exif_lat[1])/60 + Rational(exif_lat[2])/3600).to_f
p latitude
# 経度:10進数に変換して出力
exif_lng = img.get_exif_by_entry('GPSLongitude')[0][1].split(',').map(&:strip)
longitude = (Rational(exif_lng[0]) + Rational(exif_lng[1])/60 + Rational(exif_lng[2])/3600).to_f
p longitude
画像データ名
には読み取りたい画像ファイル(IMG_8765.jpg等)を入れて下さい。
Magick::ImageList.new(File.expand_path('~/Desktop/画像データ名'))
とするとDesktopから読み込むようになります。(見たままですが..)
僕の場合は、ダウンロードディレクトリの読み込み権限が設定されていなかったのでDesktop
として読み込ませました。
RMagickをインストール
プロジェクト内のターミナルから下記を実行
$ gem install rmagick
この際、エラーが出る場合はこちらが参考になると思います。
gem install rmagick でインストール失敗
bundle install "rmagick" でインストールができない
Rubyプログラムを実行する
$ ruby main.rb
実行結果
ruby main.rb
[/Users/tn/Desktop/Akihabara.jpeg JPEG 1200x1600 1200x1600+0+0 DirectClass 8-bit 535kb]
scene=0
[["GPSLatitude", "35/1, 41/1, 5920/100"]]
35.699777777777776
139.7717
これでGPSの緯度と経度が取れました!
GPSが取得できなかった
結論になりますが**iPhoneを使用して撮影した時にHDR画像だったためGPSが取得できなかった。**ということになります。
iPhoneの設定の中に"自動HDR"という機能があります。
自動HDR:
複数の写真がさまざまな露出で高速で連続撮影され、明るい部分と影の細部がきれいに表現された写真に合成する機能のこと。
iPhone端末だと位置情報付き設定にすればでMapが見られる = GPSも取得できるだろう
と思ってましたが、最初に記述した内容では取得できませんでした。
(取得方法知っている方いたら教えて下さい...)
プログラムは間違っていないはずなのになんで取得できないんだろう..って時は
自動HDRをオフになっているか確認した方がいいかもしれません。
これで何時間無駄にしたのだろう..泣
iPhone 自動HDRをオフにする
プレビューから位置情報が入っているかどうかの簡易的な確認は行っていました。
[Mac] 画像の位置情報(ジオタグ)をさくっと確認する方法
ただ、なぜ位置情報設定してあるのにGPSが読み込めないのか。設定のパターンがあるのかを検証してみました。
パターンの検証(位置情報設定はONの状態)
パターン1 両方ON
「自動HDR(合成機能)」をON 結果:
「通常の写真を残す」をON → GPSの読み込みできない
パターン2 片側
「自動HDR(合成機能)」をON 結果:
「通常の写真を残す」をOFF → GPSの読み込みできない
パターン3 片側
「自動HDR(合成機能)」をOFF 結果:
「通常の写真を残す」をOFF → GPSの読み込みできない
パターン4 参考画像の状態
「自動HDR(合成機能)」をOFF 結果:
「通常の写真を残す」をON → GPSの取得可能
まとめ
独学で効率が悪いですがこれも1つの経験です!!
今回も少し成長できたと思ってどんどん開発にチャレンジしていきます。
基礎的な内容でしたが、取得方法や注意点が参考になれば嬉しいです。