W3Cから、ブラウザで位置情報を取得する Geolocation API 仕様書の草案が公開されている。
どうやら JavaScript を使って、 GPS 機能があるデバイスから位置情報が取り出せる仕様のようだ。GPS 機能が無い場合は、IPアドレス、RFID、WiFI や Bluetooth MAC アドレス、GSM/CDMA セル ID などから推定された情報を戻すとの事。この機能を JavaScript の「navigator.geolocation」オブジェクトとして利用できるらしい。
以下、試した内容の備忘録です。Firefox 3.6.8、Chrome 5.0.375.126 で動作しました。IE8はNG。
先ずは位置情報の取得から。プログラムは簡単です。
<html> <head> <title>Test Geolocation API</title> <meta content="text/html; charset=utf-8" http-equiv="Content-Type" /> <script type="text/javascript" src="http://www.google.com/jsapi"></script> <script type="text/javascript"> google.load("jquery", "1.4.2"); </script> <script type="text/javascript"> $(document).ready(function() { var showMap = function(position) { // Show a map centered at (position.coords.latitude, position.coords.longitude). alert("緯度:" + position.coords.latitude + " 経度:" + position.coords.longitude); } // One-shot position request. navigator.geolocation.getCurrentPosition(showMap); }); </script> </head> <body> <h1>Test Geolocation API</h1> </body> </html>
マウスをソース上に置くと右上にアイコンメニューが表示されるので、コピーしてテキストエディタで test.html として保存、そのままブラウザで指定すれば実行できます。ブラウザを開くと位置情報の許可を求めてくるので許可すると、しばらくしてから位置情報が戻ってくる。
次のボタンで試せます(Firefoxだと表示まで5,6秒時間が掛ります)。
※ ライブラリ内部でエラーが発生して動作しない場合がありました。無線LANルータが原因?
位置情報が取得できるなら Google マップで現在地を表示するなど、アプリケーションへの活用もいろいろできそう。以下戻ってきた位置をマップ上に表示するプログラムです。リンクは、The Google Maps Javascript API V3 のドキュメントです。
<html> <head> <title>Test Geolocation API</title> <meta content="text/html; charset=utf-8" http-equiv="Content-Type" /> <script type="text/javascript" src="http://www.google.com/jsapi"></script> <script type="text/javascript"> google.load("jquery", "1.4.2"); </script> <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false®ion=ja"></script> <script type="text/javascript"> $(document).ready(function() { var showMap = function(position) { var latlng = new google.maps.LatLng(position.coords.latitude, position.coords.longitude); var options = { zoom: 16, center: latlng, mapTypeId: google.maps.MapTypeId.ROADMAP }; var map = new google.maps.Map($("#map_canvas").get(0), options); var marker = new google.maps.Marker({ map: map, position: latlng }); } $("#abtn").click(function() { navigator.geolocation.getCurrentPosition(showMap); return false; }); }); </script> </head> <body> <h1>Test Geolocation API</h1> <p><input type="button" id="abtn" value="現在地表示" /></p> <div id="map_canvas" style="width:480px; height:400px;"></div> </body> </html>
以下のボタンを押すと、実際に地図と現在地を表示します。
いかがでしたか?
iPhone 3GS 4.0.2 の Safari で、このページで地図を表示する事ができた。が、これはどこを表示しているのだろう?