地図リンク式フォトアルバムを生み出した5つのテクノロジ

オープンスタンダードの普及は、自由な発想に基づく多様なテクノロジの組み合わせを可能にしている。例えばMike Whitton氏が構築したWebベースのフォトアルバムもそうした事例の1つであり、これは個々の写真の撮影場所が自動的にマップ上に登録されるというシステムだが、それを構築しているのは、Exifファイルフォーマット対応デジタルカメラにGPS受信機と、Google Maps APIとPerl、PHP、JavaScriptというテクノロジの組み合わせだ。ここでは、このシステムの仕組みを解説しよう。

このプロジェクトにインスピレーションを与えたのはTim Vidas氏の作品であるのは確かだが、それはあくまで基本的な発想に関するものであり、このサイトには多くの洗練された機能が追加されている。図1は、情報がどのように表示されるかの具体例である。

このプロジェクトで最大限に活用されているのが、Google Mapsの“Info Window”機能だ。特にここでは、写真を複数撮影した地点を1本のマップピンで代表させるために、タブ付きInfo Windowの表示機能を利用している。より具体的には、図2に示したサンプル画面のように、個々のタブごとに該当イメージのサムネイルが表示され、このサムネイルをクリックするとフルサイズ表示のイメージに切り替わるようになっている。

ここで紹介している地図リンク式のフォトアルバムは、下記の5つのテクノロジで構成されている。

  1. Exif (Exchangeable Image File Format):ファイルフォーマットに関する詳細はここを参照
  2. デジタルカメラ:ExifファイルフォーマットおよびGPS受信機との接続に対応した機種
  3. GPS受信機
  4. Google Maps API(APIキーが必要:詳細はここを参照)
  5. プログラミング言語:Perl、PHP、JavaScript

Exifフォーマット

このプロジェクトを支えている大黒柱的な存在は、Exifというファイルフォーマットである。それは、JPEGやTIFFなどの標準的な画像フォーマットに対してメタデータタグを組み込む機能が、Exifには用意されているからだ。こうしたメタデータタグには、写真の撮影日時やカメラ設定を始め、撮影した場所など各種の情報を格納することができる。ただし、こうしたExifフォーマットにはすべてのデジタルカメラが対応している訳ではなく、特にこのプロジェクトに必須なロケーションタグについては、ごく一部の機種でサポートされているに過ぎない。

Figure 1. Map with geo-located 'pins'
図1 地図とリンクされた“ピン”の群れ(クリックで拡大)

カメラおよびGPS受信機

Whitton氏が使用しているのはNikon D200というデジタルカメラであるが、これが選ばれた理由は、Exifのロケーションタグをサポートしていることはもとより、高額機種よりも高精度でデータが記録されるためである(機種によっては、経度と緯度情報の末尾2桁が切り捨てられてしまう) 。つまり、Exifのロケーションタグがサポートされているカメラを選ぶのは当然として、それなりの高精度で位置情報を記録できる機種を使う必要があるのだ。これはGPS受信機側だけではなく、データを格納するカメラ側の問題でもあるので、要注意事項として覚えておこう。

ここで使用するデジタルカメラはExifフォーマットをサポートしているだけではなく、GPS受信機との接続にも対応していなければならない。Nikon D200の場合はMC-35 GPSアダプタコードも必要となるが、いずれにせよPCケーブルで接続可能なGPS受信機を用意する必要がある。なおGPS受信機との接続には、MC-35アダプタだけでなく、PCケーブルも必要となる。ここで使用しているGPS受信機はGarmin eTrex Vistaであるが、RS-232シリアル出力に対応したGarminおよびMagellan GPSユニットであれば、たいていはD200に接続できるはずだ。なおノンゼロ電圧での転送(D200との接続に必要な要件)に対応していないGPSユニットでも、NMEA 0183プロトコルのv2.01に準拠していて、PCリンクケーブルでの接続(USBは不可)が行えれば、正常に動作してくれる。

Map pin with tabbed info window
図2 タブ付きInfo Windowを表示した状態のマップピン(クリックで拡大)

Nikon MC-35アダプタとシリアルPCケーブルを介したGPS受信機とD200の接続が正しく行えると、カメラ側のコントロールパネルにGPSインジケータが点滅する。そしてGPS受信機がロックされると(3機以上のGPS衛星をトラッキングできている状態)インジケータは常灯するようになるので、その状態で写真を撮れば、撮影地点の緯度、経度、高度を始め、GPS時刻/日付のタイムスタンプ、撮影時にトラッキングしていた衛星、マップデータが、タグ情報として写真に組み込まれる。

撮影後の写真の加工

撮影したままの未加工状態の写真は、カメラ内からサーバ上にFTPで転送してから必要な処理を施すことになる。このプロジェクトの場合、WebサイトをホストしているSUSE Linux 9.2サーバ上で、専用に構築したPHPおよびPerlコードによる写真データの処理を行っている。なお、同様のプロジェクトを実装することを考えている読者がおられるようであれば、記事中に張ってあるリンクからコードをダウンロードすることができる。Whitton氏の場合は撮影後の写真加工をサーバ上で行っているが、この作業は通常のPC上でも実行できる程度のものだ。

ここでの写真データの加工は、基本的に2つのステップで行われている。1番目はPerlスクリプトを用いて、個々の写真からExifデータを抽出し、地図上での“マップピン”およびInfo Windowの表示に必要な情報を格納したXMLファイルを構築するという作業である。2番目はPHPコードを用いて、ベース地図とXMLファイルの生成および、マップマーカおよびタブの構築に用いるJavaScriptを動的に作成する作業である。なお、このプログラムではGoogle Mapsのテクノロジを活用しているが、Whitton氏が開発時に使用したのは、最新版のMaps API(2.54)であった。このマッピング用スクリプトは、Maps API 2における最新のデフォルトバージョンを自動的に使用するように作られている。

ここでは、撮影後の写真の加工作業のステップを、より詳しく見てみよう。Perlスクリプトは最初に処理対象の写真をリストに一覧してから、このリストに従って個々の写真を処理してゆく。その際には必要なExifデータを写真から抽出するが、GPSデータが記録されていない写真については処理をスキップする。なお経度と緯度に関するGPSデータは、ここで度/分/秒の形式から小数点形式に変換しておく。

経度と緯度に関する情報は撮影地点のタイムゾーン特定にも使用されるが、記録されている時刻はGPSフォーマットなので、これをUnixのタイムフォーマットに変換しておく必要もある。なおここでのタイムゾーン処理用スクリプトは、通常のLinuxディストリビューションに組み込まれているタイムゾーンテーブルを使用しており、その格納位置は/usr/share/zoneinfo/zone.tabであることを前提としている。

またこのスクリプトでは、同一ロケーションで撮影された写真が複数存在しているかをチェックするために“タブディスタンス”配列のエントリを作成している。複数の写真が撮影された地点については、タブ付きの“Info Window”(マップピンをクリックして表示される影付きのポップアップウィンドウを示すGoogle用語)が地図上に投影される。こうしたInfo Window中に表示するサムネイルイメージは、Exifデータの一部としてカメラ側で作成されるものを使用している。また必要に応じて写真を横向きに回転する操作も、このスクリプト内部で行っている。最後にXMLファイルを作成して、このスクリプトは処理を終える。

XMLファイルの作成後は、ベース地図の生成、XMLファイルの構文解析、タブ情報を格納したタブ配列の作成を行わなければならないが、それを処理しているのはPHP形式のコードである。ここでのPHPコードは、地図表示用のWebサイトにユーザがアクセスした段階で自動的に起動されるようになっているが、これは、投影用の地図が動的に生成されることを意味している。PHPコードは、タブ配列から必要な情報を読み取り、Info Windowのタブの有無にあわせた適切なJavaScriptを生成して、最終的に完成した地図の画像をWebブラウザに読み込ませる。

将来的な構想

これまでにWhitton氏が開発し終わっているのは、地図リンク式のフォトアルバムの基本機能だけであり、将来的にはいくつかの機能を追加することが構想されている。次に予定されている大きな変更は、GPSの位置データと都市名のデータベースとをマッチングさせて、撮影地点の都市名を自動的に特定させるようにすることだ。こうした処理を行うためには、“シティインデックス”とでも言うべき情報を用意して、撮影地点の地名ないしは近在の主要都市名ごとに、アルバム中のすべての写真を格納(および選択)できるようにする必要がある。また現状のコードでは、ユーザが地図ページにアクセスするごとにXMLファイルを新規に作成しているが、将来的には既存ファイルに対して変更分だけを追加するよう改められる予定である。

このプロジェクトで使用しているカメラなどのハードウェアは、いずれもかなり高額な装置ではあるが、気軽に購入できる価格帯に移行するのも遠い将来の話ではないだろう。また将来的にGPS 3が普及した場合、GPSデータの可用性と精度はより一層向上するはずである。地理リンク式のフォトアルバムのデータ管理や表示の方式も、こうした周辺環境の変化に応じて変わってゆくのは間違いがないだろう。

NewsForge.com 原文