Firefox 3.5の位置情報通知機能の仕組みとサンプル
Firefox3.5から「位置情報通知機能」が使えるようになりました。これはIPアドレスや無線LANアクセスポイントの情報を利用して、GPSなしにクライアントの位置情報を取得するものです。
早速サンプルを作って試してみました。位置情報を取得してGoogle Maps APIで地図にその位置を表示します。ちなみにサンプルは iPhone の Safari でも動作します。
位置情報通知機能の仕組み
この機能は Google Location Service を利用しているそうです。サイト側がユーザの位置情報を取得するには、JavaScriptで次のような処理を実装する必要があります。
navigator.geolocation.getCurrentPosition(function(position) { // コールバック処理 });
ページ閲覧中に位置情報取得の要求が発生すると、Firefox3.5のタブの下に「位置情報を通知してよいかどうか」の選択を求めるダイアログが表示されます。
ここで「許可」を選択すると、Firefoxから https://www.google.com/loc/json というエンドポイントに対してデータが送信されます。正確にはこのリクエストの前に http://ocsp.thawte.com/ に対して OCSP のリクエストが送信されます。OCSP というのは Online Certificate Status Protocol というものだそうです。
https://www.google.com/loc/json に対しては次のようなデータが送信されています。
{ "version":"1.1.0", "access_token":"xxxx", "wifi_towers":[ { "mac_address":"xx-xx-xx-xx-xx-xx", "ssid":"xxxxxx", "signal_strength":-53 }, { "mac_address":"yy-yy-yy-yy-yy-yy", "ssid":"yyyyyy", "signal_strength":-81 } ] }
上記のように自宅で試すと無線LANのアクセスポイント情報が2つ送信されていました。一方は自宅のもので、もう一方はマンションの他の部屋のものだと思います。どうやら接続の有無に関わらず、PCが検知しているアクセスポイントの情報を送信しているようです。
Google Location Service に対するリクエストが成功すると、位置情報が JSON フォーマットで返ってきます。この位置情報通知機能は W3C の Geolocation API に準じているそうです。ドキュメントによると、
- coords.latitude (緯度)
- coords.longitude (経度)
- coords.altitude (高度 ※)
- coords.accuracy (精度)
- coords.altitudeAccuracy (高度の精度※)
- coords.heading (方位 ※)
- coords.speed (秒速 ※)
- timestamp (タイムスタンプ)
といった情報が返されるようです(「※」で示している項目は、値が返ってきませんでした)。緯度と経度がどのくらいの精度で取得できたかが分かります。
この機能で利用される無線LANアクセスポイントの場合は、位置情報自体はすでに収集されているという点で、ケータイなどに搭載されているGPSとは少し違います。ケータイのGPSの場合は使うときに初めて位置情報が通知されますから。
当然ユーザーが「許可」しないとブラウザからMACアドレスなどの情報は送信されないのですが、自宅のアクセスポイントの位置情報の収集許可なんてしてないし、やや気持ち悪い感じは残ります。
» 次世代ブラウザ Firefox | 高速・安全・カスタマイズ自在な無料ブラウザ
コメントを残す