小ネタ 2012-015

Google WiFi GeoLocation APIを使って位置情報を表示する

Wi-FiのMACアドレスはもはや住所と考えるしかない」という記事でWiFi無線LANのMACアドレスから住所,緯度経度といった位置情報を取得できるというのが紹介されている。Windows環境で実際に試してみた。(2012-09-14)


1. Windows環境でGeoLocation APIを使ってみる

 まずWindowsで位置情報を取得する手順をバッチファイルに書いてみた。
 Windowsに標準で入っているコマンドだけではできなかったので、cURLというソフトを使う必要がある。

 [ geolocation_bat.zip (download) 0.6KB ]

 中身は、次のようになっている。
echo 無線LANのMACアドレス(BSSID)検索
netsh wlan show all | findstr BSSID
echo off
echo MACアドレス(1つめ)を入力
echo 例)00:18:84:20:E6:39
set /p MAC1="-->"
echo MACアドレス(2つめ)を入力
echo 例)00:18:84:20:E6:3B
set /p MAC2="-->"
echo GoogleのGeoLocationAPIに送信します
curl http://www.google.com/loc/json -H "Pragma: no-cache" -H "Cache-control: no-cache" -d "{ \"version\": \"1.1.0\", \"host\": \"maps.google.com\", \"request_address\": true, \"address_language\": \"en_US\", \"wifi_towers\": [ { \"mac_address\": \"%MAC1%\", \"signal_strength\": 8, \"age\": 0 }, { \"mac_address\": \"%MAC2%\", \"signal_strength\": 8, \"age\": 0 } ] }"
echo [End]
pause

 最初にnetshコマンドを使ってWiFiのBSSID(=MACアドレス)を探して表示し、その中から2つ入力する。
 次に入力されたMACアドレスと必要な情報をJSON形式でhttp://www.google.com/loc/json宛に送信する。
 そうするとGoogleのサーバーが位置情報を返してくれる。

 位置情報が得られるのはMACアドレスが2つ以上有効な場合だけで、Googleのサーバーに登録されていないMACアドレスの場合は有効にならないようだ。

 netshコマンドで無線LANの情報を取得するのは、Windows vistaかWindows 7かWindows 8でなくてはならない。Windows XPは不可。



2. WindowsでGeoLocation APIを使った位置情報の取得ソフトを自作する

 Windowsで位置情報を取得するソフトを作ってみた。
 cURLの機能を使うためのライブラリlibcurlと、JSON形式のデータを扱うためにjsmnというライブラリを使っている。

 [ geolocation.exe + source code geolocation_01.zip (download) 595KB ]

 実行すると、緯度経度の数値が表示される。

 以前に作ったGoogleMapsの地図表示ソフトとソースコードをくっつければ、GPS代わりに使えるかもしれない。
 GPSを動かすソフトとソースコードをくっつけると、GPSの位置情報と比較ができるかもしれない。



参考Link
・高木浩光氏の記事 Wi-FiのMACアドレスはもはや住所と考えるしかない
・Linuxでの方法 linux のコマンドラインから、wi-fi の情報をつかって位置情報を得る
・Macでの方法 OSX のコマンドラインから、wi-fi の情報をつかって位置情報を得る
・Perlでの方法 Perl - Google に無線 LAN アクセスポイントの場所を聞く
・Rubyでの方法 Mac/LinuxのWiFiで位置情報を取得