GPS-CS1K購入以降、写真への位置情報タグ(GeoTag)づけの良さを知ってしまっているのですが、とはいえ、今の時代に、専用のGPSロガーを持ち歩く、というのは、特に旅では、交換用の電池の用意など考えてもエコじゃないし、少しでも持ち物を減らしたいからちょっといやですよね。できれば、常に持ち歩いているスマホひとつで済ませたいというのが心情ですよね。

ということで、スマホでログした位置情報をデジカメ写真に付ける方法を見直してみました。デジカメ写真にGeoTagをつけたいという要望は多くのヒトが持っているため様々なソリューションが提案されていますが、一方で、私はソニーの、PlayMemories Home+GPS ImageTrackerで経路情報を管理していましたので、できればそのままGPS ImageTrackerで読み込みたい、と思ってしまいます。

そんななか最近、PCを買い替えた為に、以前整備した方法が使えなくなってしまったため、新たに構築したのが以下のフローです。(しょっちゅうこんなことになっている気がする)

ログの取得とタグ付けまでのフロー

  1. スマホ(私はiPhone)のアプリ、Moves でアカウントを作成しておく
  2. Moves Exportと連携しておく(厳密にはMovesから直接データのDownloadは可能だが、指定日付のみ、といったことができないため、このAppを利用します)
  3. iPhone + Moves でログを取る(これは基本常にONしているので旅行限定とかいうわけではない)
  4. Moves Exportで該当日の位置情報ログをGPX形式で取得する
  5. GPS Visualizerが提供しているWebサービス(http://www.gpsvisualizer.com/gpsbabel/)を使って、GPX形式のログをNMEA0183形式に変換する。設定値は以下でOKです。(Track, GPX→NMEA0283)
  6. 変換できたNMEA0183形式ログをGPS ImageTrackerで読み込めるように変換する(*後述)
  7. できたログをGPS ImageTrackerに読み込んで、GeoTagを写真につける

conert

Sony GPS ImageTrackerで読み込むための作業

NMEA0183ログを、SonyのGPSログ形式に変換していますが、ここはひとクセありまして、でてきた素のNMEA形式のログが

$GPRMC,235856.000,V,3541.999,N,13946.408,E,0.00,0.00,160916,,*1D
$GPGGA,235856.000,3541.999,N,13946.408,E,0,00,0.0,0.000,M,0.0,M,,*6D
$GPRMC,235916.000,V,3542.007,N,13946.409,E,0.00,0.00,160916,,*14
$GPGGA,235916.000,3542.007,N,13946.409,E,0,00,0.0,0.000,M,0.0,M,,*64

となっているのですが、GPS ImageTrackerで読み込むには2点問題があったようなのです。(あくまでログを見比べての推測)

  • 1行目に"@Sonygps/ver1.0/wgs-84"が必要
  • $GPRMC,$GPGGAとペアで、$GPVTGが必要

が怪しい。と、いうことで、簡単なスクリプトを書いて、1行目に "@Sony..." を追加、そして、2行おきに"$GPVTG,0.000,T,,M,0.000,N,0.000,K*60"というダミーのVTG情報を書き込むようにしました。VTGは速度の情報のようなのですが、写真の位置情報には不要なので、問題ないでしょう。これで上記を以下のようにすることで、無事読み込むことができました。

@Sonygps/ver1.0/wgs-84
$GPRMC,235856.000,V,3541.999,N,13946.408,E,0.00,0.00,160916,,*1D
$GPGGA,235856.000,3541.999,N,13946.408,E,0,00,0.0,0.000,M,0.0,M,,*6D
$GPVTG,0.000,T,,M,0.000,N,0.000,K*60
$GPRMC,235916.000,V,3542.007,N,13946.409,E,0.00,0.00,160916,,*14
$GPGGA,235916.000,3542.007,N,13946.409,E,0,00,0.0,0.000,M,0.0,M,,*64
$GPVTG,0.000,T,,M,0.000,N,0.000,K*60

なおスクリプトはgolangを使って書きクロスコンパイルすることで、Windows環境でも動くバイナリを簡単に作ることができました。

$ brew install go --cross-compile-all
$ GOOS=windows GOARCH=amd64 go build hello.go 

とオプションをつけてBuildするだけで、Windows用の実行ファイル hello.exe を作ってくれます。うーん。便利!参考にソースは最後に、できたバイナリはこちらにおいておきます。引数で変換したいファイルを指定すると、同じ名前の.logというファイルを作成します。

写真に位置情報がついていると、旅を振り返るのが、より楽しくなりますね。(^^)

NMEAのフォーマットも大したことなさそうなので、より簡単にするためには、日付指定で直接 Moves から APIを使って自分でダウンロードして、SonyGPS形式で出力できるようなものにしたいのですが、、またいずれ。