【GPS】WebアプリにおけるGPS情報の取得と現在地の地名を求める
GPS情報をブラウザで取得するには、GeolocationAPIを利用する。
Chromeでは、http通信では使用できなくなっているので注意が必要。
※サンプルでは、取得したGPS情報をAjaxを使ってDBに書き込むと同時に地点を求めている。
GPS情報取得部分
if (navigator.geolocation) { // 現在の位置情報取得を実施 navigator.geolocation.getCurrentPosition( // 位置情報取得成功時 function (pos) { //取得したGPS情報を画面に書き出す var location ="<li>"+"緯度:" + pos.coords.latitude + "</li>"; location += "<li>"+"経度:" + pos.coords.longitude + "</li>"; var nDate = new Date(); location += "<li>"+"時刻:" + nDate.getHours() + ":" + nDate.getMinutes() + ":" + nDate.getSeconds() + "</li>"; //ajaxにて現在地をDBに書き込む var data = { lat : pos.coords.latitude, lng : pos.coords.longitude, }; //Ajax通信メソッド //type : HTTP通信の種類(POSTとかGETとか) //url : リクエスト送信先のURL //data : サーバに送信する値 $.ajax({ type: "POST", url: "../common/xxxx.php", data: data, dataType: "html", //Ajax通信が成功した場合に呼び出されるメソッド success: function(html){ $('#location').html(location); $('#result').html(html); } }); }, // 位置情報取得失敗時 function (error) { var message = ""; switch (error.code) { // 位置情報取得できない場合 case error.POSITION_UNAVAILABLE: message = "位置情報の取得ができませんでした。"; break; // Geolocation使用許可されない場合 case error.PERMISSION_DENIED: message = "位置情報取得の使用許可がされませんでした。"; break; // タイムアウトした場合 case error.PERMISSION_DENIED_TIMEOUT: message = "位置情報取得中にタイムアウトしました。"; break; default: message = error.code; } window.alert(message); },{ enableHighAccuracy: true } ); } else { window.alert("本ブラウザではGeolocationが使えません"); }
地名情報取得部
上記で取得した緯度経度から、Yahoo!リバースジオコーダAPI
developer.yahoo.co.jp
を利用して地名を求める。
Yahoo!リバースジオコーダAPIはクレジット表示などの規約があるので注意する。
下記サンプルPHPはJSONで受取り、パースして変数$locationNameに取り出す。
※DB書込部、POSTデータのサニタイズ部等は省略
/Yahoo!リバースジオコーダAPIにて、緯度経度から町名を導く $uri = "http://reverse.search.olp.yahooapis.jp/OpenLocalPlatform/V1/reverseGeoCoder" . "?lat=" . $lat . "&lon=" . $lon . "&appid=" . $appid . "&output=json"; $curl = curl_init($uri); curl_setopt($curl,CURLOPT_RETURNTRANSFER,true); $response = curl_exec($curl); curl_close($curl); $res = json_decode($response,true); $locationName = $res[Feature][0][Property][Address]; print $locationName . "付近\n";