今回はWassr(ワッサー)の実験的試みワッサーラボで公開している、携帯の位置情報を使ったコンテンツについてです。
ワッサーラボってなに?
ワッサーラボは、今後正式なコンテンツになるかもしれないし、ならないかもしれない実験的な企画を公開する場[1]です。
サイトの方向性などを考えるうえで主流のラインには乗らないけれど技術的におもしろそうなことを思いついた場合などに、とりあえずラボで公開してみる、という形で使っています。
今回は、この位置情報を使ったコンテンツの裏側技術的な仕組みを解説します。
日本中のヒトコト*ハイパーとは?
ワッサーラボで公開している、携帯から発信できる位置情報を使ったコンテンツが、日本中のヒトコト*ハイパーです。
日本中のヒトコト*ハイパーをひとことをで説明すると、日本を505のエリア(オープンiエリアに準拠)に分割し、このエリアを参加者全員で奪い合う陣取りゲームです。
これは、携帯の位置情報を使うので、実際その場所に行かないと更新できないため、より現実とWebのサービスとが融合したおもしろい試みと言えます。
この位置情報に、オープンiエリアを採用したのは、全キャリアに対応するためです。4キャリア中一番精度が粗いNTTドコモに合わせるため、もっと細かい単位で位置を取得できる Willcom、au、SoftBankは取得した位置情報をiエリアに変換しています。
NTTドコモも903iシリーズの一部機種および904iシリーズではGPSを利用できるのですが、まだまだ該当機種が普及していないためWassrでは対応しておりません。
携帯電話の位置情報
携帯電話の位置情報はアンテナの簡易位置情報とGPSによるより正確な位置情報の2種類が取得できます。
Wassrは「お気軽メッセージングハブ」ですので、サイトの趣旨上そこまで正確な情報が必要ないうえに、全国に505のエリアしかないiエリアに丸めてしまうため、必要ないと判断しました。
位置情報は緯度・経度で送られてくるのですが、日本で広く普及している緯度・経度の表現方法には日本測地系(tokyo)と世界測地系(wgs84)の2種類あり、位置情報関連アプリケーションを実装する際には注意する必要があります。日本測地系は今後は利用が推奨されず、世界測地系を使うことが推奨されていますので、アプリケーションの内部データとして使うには、世界測地系を使うほうが良いでしょう。
また、表記方法が度(degree)で表現する場合と度分秒(dms)で表現される場合など多彩なのでこのあたりの変換も行う必要があります。Perlの場合にはKazuhiro Osawa氏によるGeo::Coordinates::Converterというライブラリを使うとこのあたりの変換をすべて面倒見てくれるのでお手軽です。Wassrでもこのモジュールを利用しています。
モバイルサイトでは QueryString をセッションを引き継ぐような仕様になっているサイトが多いですが、位置情報を使う際には
のようなURLにリダイレクトしようとすると
のように、無条件で?foo=barを文字列連結されるので(URLの中に?が2回でてきてしまいURI的に不正になってしまうので)、PATH_INFOなどにセッションIDを埋め込むなどの細工が必要です。
iエリアへの変換
Wassrでは一番精度の粗いNTTドコモのオープンiエリアに合わせて、座標から変換して利用しています。
精度が高いキャリアでは精度の高い位置情報を街区レベルの住所・駅情報などを求めることもできるのですが、Wassrではあえてそれはやっておりません。
キャリアごとに得られる情報の粒度をそろえたかったのと、ユーザがあまりにも細かい位置情報を送ってしまうとプライバシーの観点から問題が起きやすいためです。
座標からiエリアへの変換はNTTドコモのサイトからダウンロードできるCSVにiエリアの外接情報が含まれているのでこれを利用するのが一番簡単です。
しかし、iエリアはでこぼこしているため外接情報だけでどのエリアに含まれるかを判断すると、複数のエリアの外接領域に入ってしまう場合に本来とは違うエリアに分類されてしまいます。
そこで、まじめに計算するようにしました。iエリアを計算するにはメッシュコードというものを求めなくてはいけないのですが計算式が複雑になるのでkokogikoさんのLocation::Area::DoCoMo::iAreaからメッシュコードを求める部分を拝借して、つきあわせるようにしています。
Wassrは、時間とヒトコトを結び付け公開するサービスです。そこに「位置情報」という第三の軸を取り入れたらどうなるかという試みでした。今後も、こういった一風変わった試みを、ラボで提供していければと思っております。