PHPで位置情報(GIS)を取得する方法@Geolocation API

2013年12月9日

スクリーンショット 2013-12-09 21.43.40
 
位置ゲーからはじまり、スマホが普及したことによってユーザーへの道案内から各種APIまで大活躍のGIS。
HTML5でGeolocation APIがサポートされて開発されやすくなりましたが、それでもPHPプログラマーには少し敷居が高いGISをPHPで取得する方法をご紹介します。
 

JavascriptなGeolocation APIをPHPで使う

Geolocation APIはJavascriptで、位置情報(緯度・経度)を取得することができるAPIです。HTML5で実装されて、すげーって盛り上がった方も多いのではないでしょうか。
 
しかし、GISを取得するには、遅延処理が必要なことから、非同期処理が可能なJavascriptで提供しています。私も含めて、PHP使いでJavascriptはいまいち馴染みがない!という方も多いはず・・・。
そこで、以下のようなコードを書いてみました。同じファイル内において下さい。
 
こっちはPHP。

	$url = "処理後、コールバックするURL(http://〜)";

 
こっちはJavascript。中に、PHPの変数$urlを使っております。


	<script>
		navigator.geolocation.getCurrentPosition(successCallback, errorCallback);
		function successCallback(position) {	/* 成功時の処理 */
			var latitude = position.coords.latitude;
			var longitude = position.coords.longitude;
			if(latitude){	/* 変数latitudeに値が入ってた時 */
				location.href = "<?php echo $url; ?>?lati=" + latitude + "&long=" + longitude + "&map=https://maps.google.com/maps?q=" + latitude + "," + longitude;
			}
		}
		function errorCallback(error) {	/* 失敗時の処理 */
			location.href = "<?php echo $url; ?>?alart=on";
		}
	</script>

 
これをhead内にでも放り込んで下さい。
簡単に説明しますと、これが書かれているファイルがロードされると、位置情報発信の許可を求めるアラートがでまして、それを許可すると緯度・経度を取得して、PHPで規定したコールバックURLへとリダイレクトをかけます。緯度・経度は、URL引数に入っておりますので、コールバック後、GETで取得して、いろいろといじってください。
ついでに、Googlemapでその緯度・経度を示すURLも一緒に入っております。
 
なお、失敗した時は、リダイレクトURLにGET値「alart」を持って、リダイレクトをかけるようにしています。
 
 

GIS INFORMATIONを使ったらもっと簡単に

と言っても、以上の処理って面倒というか、わざわざみんなが作るほどの処理ではないなー、と感じました。
そもそもJavascriptってわかりにくいし。echoと同等なのは、alartなんだろうけど、何かbody内でしか動作しないし。いまいち動作しないことも多いし。
 
ということで、簡単ですがwebアプリ化してみました。
 
スクリーンショット 2013-12-09 21.43.40

GIS INFORMATION

 
引数を持って転送をかけると、緯度・経緯・GooglemapのGET値をもってリダイレクトをかけてきてくれます。
なので、headerのlocationで必要な引数を持って飛ばして、使ってもらえればと思います。ガラゲーのAPIも一応は入れているのですが、テスト環境が十分ではないので、そちらは自信はないです。
 
使い方はトップページに書いてありますので、ぜひご覧ください。
 
GIS INFORMATION
 
それでは、また。

slackチームに参加下さい

ng-onsenui2.slack.com

OnsenUI2(Angular2)について知見を共有する場です。Angular2に限ってOnsenUI2を議論できる場がなかったのでつくりました。これから使い始めるという方はぜひご参加ください。
https://ng-onsenui2.herokuapp.com/

Ionic2.slack.com

日本語情報が少ないのでこちらで知見を共有できればと思います。お陰様で参加者100名を超えました。ありがとうございます。
https://ionic2-ja.herokuapp.com