【コラム】

OS X ハッキング!

218 祝GPS対応!? iPhoto 6を強引にGoogle Mapsと連携させる

    海上忍  [2007/03/16]

    前回、iTunes 7.1に「07/03/13上のアップデートを……」と表示される件について触れましたが、これ、環境設定の「一般」タブで[アップデートを自動的に確認する]をONにすると表示される、次回の更新確認日を知らせるメッセージですね。大変失礼しました。iPodのファームウェアが更新されるとかされないとかいう噂があるもので、気になることは変わりませんが……。

    さて、今回はiPhoto 6について。Mac OS X 10.4.9のリリースにより、一部のUSBマスストレージをマウントできない問題が解決、晴れてSONYのGPSユニット「GPS-CS1K」をMacから直接利用できるようになった。そこで手近にあるiPhoto 6をあれこれイジり、EXIFにGPSデータを持つ写真をスマートに楽しんでしまおう、という寸法だ。

    EXIFにGPSデータを埋め込む手順のおさらい

    こちらの連載でも触れているとおり、GPS-CS1KはWindowsでの利用を前提とした製品。記録したGPSデータを(JPEGファイルの)EXIFに書き込むツール「GPS Image Tracker」はWindows専用、我らがOS Xは非対応。GPSログ自体はNMEA形式で記録されているため、データそのものに汎用性はあるものの、EXIFへの書き込みには一工夫が必要になる。

    話が重複するためサラリと紹介するが、GPS-CS1Kから取り出したログ(この時点ではNMEA形式)をAutomatorで動く「GPS Automator Actions」でGPXに変換、その後「JetPhoto Studio」を使い写真とマッチング、撮影日時がもっとも近いもののEXIFにGPSデータを書き込む、といった手順が考えられる。PerlやRubyを利用した方法もあるものの、筆者が紹介する方法がもっとも手軽だろう。

    いざiPhoto 6を改造する

    バンドル内部のリソースファイル(例: iPhoto.app/Contents/Resources/Japanese.lproj/Localizable.strings)を見れば分かるが、iPhoto 6はすでにGPS関連機能を備えている。なんらかの問題により隠蔽されたものと考えられるが、強引にその機能を引っ張り出す方法がないわけではない。

    以下に挙げる作業手順は、iPhoto 6内部のnibファイルを書き換え、インスペクタの「露出」タブに[表示]ボタンを追加することが目的。GPSデータを持つ写真を選択し、[表示]ボタンをクリックすれば、そのGPSデータをもとにGoogle Mapで地図を表示できるようになるのだ。iPhoto 6のGPSデータの計算方法に問題があるらしく、しばしば撮影地点はズレて表示されるが、その辺はご愛嬌。GPS-CS1KをOS Xから直接利用できるようになった、ああめでたいな、というわけでiPhoto 6がGPSに正式対応するその日まで長い目で見守ろう。

    注: iPhoto 6の内部に手を加えるため、不用意に操作すると起動不能になるなどの問題が発生します。バックアップを作成するなど適切な処置を講じたうえで、自己責任のもと作業に臨んでください。なお、筆者および編集部は生じた不利益に対し一切の責任を負いません。

    iPhoto 6とGoogle Mapsの連携機能を有効にする手順(要開発環境)

    1. iPhoto 6.appのアイコン上でコンテクストメニューを表示し、[パッケージの内容を表示]を選択する

    2. 「Contents」→「Resources」→「English.lproj」の順にフォルダを開く

    3. InfoPanel.nibの複製を作成し、バックアップとして保管しておく。元通りにするときに必要となるため、取り扱いに注意

    4. InfoPanel.nibのパッケージの内容を表示し、keyedobjects.nibを適当にリネーム、バックアップとして保管しておく。元通りにするときに必要となるため、取り扱いに注意

    5. 操作手順2の位置から「Japanese.lproj」フォルダを開き、InfoPanel.nibのパッケージの内容を表示する

    6. Japanese.lproj側のkeyedobjects.nibを適当にリネームし、バックアップとして保管しておく。元通りにするときに必要となるため、取り扱いに注意

    7. Japanese.lproj側のkeyedobjects.nibを、English.lproj側のInfoPanel.nib内にコピーする

    8. English.lproj側のInfoPanel.nibをダブルクリックし、Interface Builderで開く

    9. 「写真の情報」ウインドウ上の「露出」タブを表示する

    10. メニューバーで[Tools]→[Show Inspector]を選択する

    11. インスペクタ下部にある[表示]ボタンを選択し、メニューバーから[Edit]→[Duplicate]を選択する

    12. 複製された[表示]ボタンをドラッグし、表示位置がオリジナルの[Show]ボタンに重なるよう調整する

    13. [control]キーを押しながら、複製された[表示]ボタンを「InfoPanel.nib (English)」ウインドウの「File's Owner」までドラッグ & ドロップする

    14. インスペクタには自動的に「Connections」→「Target/Action」が表示されるので、[showGPS]を選択し[Connect]ボタンをクリックする

    15. 上書き保存してからInterface Builderを終了する

    16. English.lproj側のkeyedobjects.nibを、Japanese.lproj側のInfoPanel.nib内にコピーする

    左は改造前。改造後(右)に現れる[表示]ボタンをクリックすると、Google Mapsと連携して撮影地点の地図が表示される

    コーディングは一切必要なし、Interface Builderが初めてというユーザでも問題ない……はず

    新着記事

    特設サイトの情報

      人気記事

      一覧

        イチオシ記事

        新着記事

        特別企画

        マイナビニュースマガジン