たたみラボ

  • about
  • member
  • r&d
  • blog
  • tatamicast

blog

RSS

ソニーCSLから無線LANで位置を特定するPlaceEngine登場

icon July 13, 2006 4:57 PM by funami このエントリーを含むはてなブックマーク

フナミタカオです。
Where2.0で無線LANを使っって位置を特定する=ロケーションセンシングサービスとして、LokiやPlazerが紹介されていましたが、先日、ソニーコンピュータサイエンス研究所からPlaceEngineがベータリリースされました。
専用クライアントが拾った無線LANアクセスポイントの電波状況から位置を割り出すという仕組みで、複数の基地局からの電波の強さとかを見て、30m〜200m 程度の範囲内で位置が推定されるとのことです。

最初は、登録されているアクセスポイントが少ないので、位置特定ができないかもしれませんがユーザーが、その位置をマップ上にプロットしてサーバーに報告することで、どんどん精度が増して行く仕組みです。

WS000155.JPG
↑自分の居場所をデータベースに報告できる。
これにより、そのPCが受信しているアクセスポイントの情報が蓄積されてゆくことになる。
三角点がどんどん増えていく感じが、おもしろいです。みんな、伊能忠敬や新田次郎の気分も味わえるかも
集合知でデータベースが充実するところがWeb2.0ですね。


クライアントアプリが結構カッコいいです。

登録済みのアクセスポイントがあれば、位置がわかる

WS000154.JPG
登録した結果↑こんな感じでMAPに表示されました。


「現在地を取得」ボタンを押すと何が起こるのか?


Mapの左下にあるを押すと何が起こるのでしょうか?

ページを開いたばかりのとき、専用クライアントが起動していれば、
PlaceEngineクライアントが見つかりました。
と表示されるはずです。
この状態で、ボタンを押してみます


      PlaceEngineサーバー問い合わせ中...

      N35.6606 E139.775 東京都中央区勝どき一丁目 1m


と遷移して位置が特定されます。



APIの詳細は未確認ですが、マッシュアップ等も可能なアーキテクチャにしてあるとのことなので、自分のいる場所のリアルタイムGoogle Maps反映とかもできたりするのかもしれません。
WiFi電波で位置が分かるPlaceEngine試験公開中!

とここギコさんも述べられていますが、ローカル専用アプリのAPI自体はまだ未公開のようなので、ちょっとだけ調べてみました
肝は
http://www.placeengine.com/javascripts/pe.js
↑このJavascriptです。

ローカル専用アプリは実は5448のポートを使う、サーバーになっていることがわかりました。このローカルアプリがアクセスポイントの無線を受信し、ブラウザから呼び出せるようになっているようです。
また、サーバーに問い合わせて、緯度経度を取得しているのも、このクライアントアプリのようです。

http://localhost:5448/rtagjs?
ためしに、こんな感じで、ブラウザで打つと、なにやら怪しげなJSONオブジェクトが戻ってきました。
recvRTAG("PlFdxhsRbVyoBtQNbLU6MQsEMMwlC4Zk9MwZTfjFUZoezA2JB0XPZPB5lQVh1EHU.iqgtn-2pA1NIJtMkoHztleBUblAAbetILYsQbdqRrKipjCUklxnkuhCa6DH-JwPhnxjr2LqZWIz4P-rtYtXRvReNMAE27v-MJeNDWDPF2rwpjkTbz.b3ypaBPAzyKbwRA98iMjoVJh81HrZiHHLhCdHOsKPFb.qX9mgE6IZduZLlQrrY0uv3NaT-pGO1LOkTPoHnSlRbK7IVSq3uveoMITMNKRBNTVgDgDCZPON7PjaCQ-oy.07A6gfhU4mKsnzc-PzywxniCr2kLBMj9A21g**",1,1152779910,"zSbUwyHPSm9-G3laoymu.JG6iXcMw1SEM9rlJrroa14*","4GLua8-T-y");
どうもこれが無線LANのアクセスポイントの情報のようです。 このオブジェクトはsendScriptメソッドによって、recvRTAGメソッドを実行します。

recvRTAGは5つの引数(rtag,numap,time,k,tkn)を持ちますが、正常に取得できていれば、submitRtag(rtag,k,time,tkn)ということで、を実行します。

このsubmitRtagna内で実質的に以下のURLが


http://www.placeengine.com/api/loc?rtag=PlFdxhsRbVyoBtQNbLU6MQsEMMwlC4Zk9MwZTfjFUZoezA2JB0XPZPB5lQVh1EHU.iqgtn-2pA1NIJtMkoHztleBUblAAbetILYsQbdqRrKipjCUklxnkuhCa6DH-JwPhnxjr2LqZWIz4P-rtYtXRvReNMAE27v-MJeNDWDPF2rwpjkTbz.b3ypaBPAzyKbwRA98iMjoVJh81HrZiHHLhCdHOsKPFb.qX9mgE6IZduZLlQrrY0uv3NaT-pGO1LOkTPoHnSlRbK7IVSq3uveoMITMNKRBNTVgDgDCZPON7PjaCQ-oy.07A6gfhU4mKsnzc-PzywxniCr2kLBMj9A21g**&key=zSbUwyHPSm9-G3laoymu.JG6iXcMw1SEM9rlJrroa14*&t=1152779910&tkn=4GLua8-T-y&fmt=json

がAjax.Requestで呼ばれます。
これによってもどってくるのが

[139.77501,35.66062,2,{'addr':'東京都中央区勝どき一丁目','msg':'位置が取得できました','t':1152779910}]

緯度経度と住所!
ここまでくれば、あと一歩。
Ajax.RequestのonComplete:recvLoc2を通して、

http://www.placeengine.com/mapのスクリプト部にある、PEngineのコンストラクタで渡されたloc_callbackが実行されます。


var pe = new PEngine({
sameserver:true,
loc_callback:function(x,y,r,info){if (x != 0 && y != 0 && r >= 0) setCenter(x,y,(r<100?0:1));},
rtag_callback:function(rtag,numap){
last_rtag = rtag;
if (tellmode) {
tellCheckReady(numap);
return false;
} else {
return true;
}
}});

setCenterメソッドによって、GoogleMapのセンターとズームが取得した位置となります。

長かった~。
でも、中身がわかってすっきりです。

以上のことより、
・専用クライアントとブラウザは5448のポート経由で会話し、無線の情報を取得。
・無線の情報をPlaceEngineサーバーにAjax.Requestで送り、位置を解決!
になります。

こんな感じですので、自分のWebアプリに組み込むこともやればできそうですね。
PCのデバイスとつながるために、専用アプリをhttpサーバーにしてしまうというアイデア面白いですよね。

まあ、考えてみればGoogleデスクトップも
http://127.0.0.1:4664/
でした。でも、このポート番号のバッティングって起こらないのかなあと、ちょっと心配に...


今後の展開もたのしみ

Web サービス事業者および研究コミュニティの方々へ: PlaceEngine と連携して、位置情報サービスの世界を一緒に盛り上げませんか? 私たちが生活している場 (リアル) とインターネットの世界 (バーチャル) を融合する新しいサービスやアプリケーションの創造を目指して共同実験しましょう!
というメッセージもありますが、ぜひ盛り上げたいなあと思います。

PlaceEnginehttp://www.placeengine.com/

TRACKBACKS

ページトップへ



(C) RECRUIT MEDIA COMMUNICATIONS CO., LTD.