PlaceEngineの仕組み

   このエントリをはてなブックマークに登録    2008/2/14

802.11b電波を使って位置情報を取得できるサービスを提供するPlaceEngineKoozyt(クウジット)さんにお邪魔してきました。 SONYからのスピンアウトベンチャーで、私が会社を辞めるときに「こんな会社があるよ、見に行かない?」と先輩に紹介して頂きました。 行ってみてびっくり、実は知り合いが結構いたり、知り合いの知り合いだったりしました。


塩野崎さんによる解説 ※1

※1 塩野崎さんはWIDEの先輩です。この写真は「あ、今の格好撮影したいのでもう一回やって下さい!」と言ってポーズをとってもらったので、多少わざとらしいかも知れません。

今回は、GPSを使わなくても位置情報がわかるというユニークなサービスであるPlaceEngineの仕組みを聞いてきました。 Mapionや「みんなの地図2」などで採用されているそうです(参考:ソリューション一覧)。 (知っている人にとっては、多少今更な面もあるかも知れませんが。。。)

位置情報の取得方法

PlaceEngineでは、位置情報が必要になったときに以下の3つの情報を利用します。

  • BSSID(マックアドレス)
  • SSID(ステーション名)
  • RSSI(Received Signal Strength Indicator、受信信号強度)

BSSIDとSSIDは802.11のビーコン(beacon)フレームに含まれている情報です。 RSSIは、ビーコン受信時の電波強度です。 RSSIの表現方法は、ドライバやプラットフォームによって様々だったそうです。 例えば、dBで表現されていたり0〜100%だったりとバラバラな表現をノーマライズするのが結構大変だったとのことでした。

PlaceEngineでは、位置情報を取得するときに802.11デバイスをスキャンします。 スキャンした結果、発見したベースステーションの組み合わせと電波強度で位置を推測します。

PlaceEngineでは、取得した電波情報をPlaceEngineサーバに送信し、PlaceEngineサーバが予測した位置を返します。 位置情報は、ユーザからの投稿で実現しています。

緯度/経度を住所情報に変換する仕組みもあるそうです。 また、インターネットアクセス機能が無いデバイス用にPlaceEngineサーバと接続せずにデータベースを手元に持っているローカルDB版もあります。

このような仕組みであるため、GPSほど正確な位置にはなりませんが、GPSデバイスが無い機器でも位置情報を推測する事が可能になります。 (もちろん、GPSの代わりに802.11無線デバイスは必要です。)

ソフトウェアのインストール

PlaceEngineを利用するには、PlaceEngineソフトウェアをインストールする必要があります。 これは、無線LANデバイスから802.11情報を取り出すために必要なソフトウェアです。

このソフトウェアは、HTTPサーバとして動作しています。 各PlaceEngineサービスを使うためには、自分のマシンにインストールされたHTTPサーバから無線情報を取得し、それをPlaceEngineサーバに送信する必要があります。 (ただし、ローカルDB版ではPlaceEngineサーバに問い合わせる必要がありません。)

API

PlaceEngine APIも提供されています。 JavaScriptなどによるサンプルがKoozyt社サイトの解説コーナーで紹介されています。 Google Maps APIとのマッシュアップ例もありました。


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
<title>PlaceEngine + Google Maps</title>
<script src="http://maps.google.com/maps?file=api&v=2&key=...."  *1
      type="text/javascript"></script>
<script src="http://www.placeengine.com/javascripts/pengine.js"
      type="text/javascript"></script>
<script type="text/javascript">  *2
    //<![CDATA[
    var map = null;
    function load() {
      if (GBrowserIsCompatible()) {
        map = new GMap2(document.getElementById("map"));
        map.addControl(new GLargeMapControl());
        map.addControl(new GScaleControl());
        map.setCenter(new GLatLng(35.67134, 139.76516), 17);
      }
    }
    //]]>
</script>
<style type="text/css">
.peui input {margin:0 0 -4px 0;}
</style>
</head>

<body onload="load()" onunload="GUnload()">

<h1>PlaceEngine + Google Maps</h1>

<div id="map" style="width: 500px; height: 300px"></div>

<div class="peui">
<input alt="位置を教える"
     src="http://www.placeengine.com/images/wide_bt2.png" type="image"
        onclick='pe.registerLocation(map)' />  *3
<input alt="現在地を取得"
     src="http://www.placeengine.com/images/wide_bt1.png" type="image"
        onclick='pe.getLocation()' />
<span id="pestatus"></span>
</div>

<script type="text/javascript">
var pe = new PEngine({
  onGetLocation: function(x, y, r, info) {   *4
    if (map != null) map.panTo(new GLatLng(y, x));
    if (document.getElementById("pestatus")!=null) {
      document.getElementById("pestatus").innerHTML = info.addr;
    }
  },
  idstatus:"pestatus",
  appkey:"....."  *5
});
</script>

</body>
</html>

*1: Google Maps用のAPI Keyを設定します。

*2: Google Mapsの地図設定用スクリプトです。

*3: 位置登録ボタンを定義しています。Google Mapsオブジェクト(map)を引数として指定すると、位置登録ボタンを押した時点でのmapの表示位置を中心に登録ページが開くようになります。

*4: onGetLocation という引数としてコールバック関数 を設定しています。ここで、コールバック関数に渡される引数の意味は以下の通りです。

function(x, y, r, info)
  x    経度
  y    緯度
  r    エラーコード. > 0 であれば正常終了,  < 0 の場合はエラー
  info その他の属性情報。 info.addr に住所が格納される

この例では, 取得した緯度経度に応じてmapをスクロールさせ、住所を表示しています。

*5: PlaceEngine用のアプリケーションキーを設定します。

Rubyによるサンプル

Rubyを使ってPlaceEngineから位置情報を取得して、その位置をGoogle Earthに表示するサンプルはこちらをご覧下さい。

iPod Touch × PlaceEngine

PlaceEngineをiPod Touchで動作させてみたというデモ映像です。 「GPSが無くても位置がわかる」というコンセプトは理解し易いのですが、私の頭の中はPCが念頭にあるので、イマイチ嬉しさが良く理解できませんでした。 しかし、このように「GPSがついていないけど無線LANはついているモバイルデバイス」で位置がわかる、というようなデモビデオを見ると「凄く嬉しいかも」と思えました。

デモビデオって強いですね。 何か新製品や新サービスなどを作ったら、プロモーションとしてデモビデオを作成してYouTubeなどに掲載するのが必須になる日も近いかも知れませんね。 っていうか、既にそうなってます?もしかして。。。

いや、強いのはデモビデオというよりも動作していて直感的にわかりやすい何かなのかも知れないですね。

PlaceEngineがiPod Touchにのった!

PlaceEngine×iPod Touchフィールドデモ

   このエントリをはてなブックマークに登録