Webエンジニア 新人日記

Webエンジニアになりました。元々はCOBOLやらBASICやらでプログラムしてました。C言語やVisualBasicは趣味でやっていましたが、久々に現場復帰ということです。資格はエンベデッドスペシャリスト、DBスペシャリスト、ネットワークスペシャリスト、セキュリティスペシャリスト、システムアーキテクト、プロジェクトマネージャ他を所有

【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はクレジット表示などの規約があるので注意する。

下記サンプルPHPJSONで受取り、パースして変数$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";