PHPで位置情報を取得してGoogleMapAPIで使用する方法
GPSみたいな位置情報をPHPで取得し、GoogleMapAPIでその場所を反映させたかった。調べてみるとHTML5のGeolocation APIというものが使えそう。
■対応ブラウザ
IE9~ / FireFox3.5~ / GoogleChrome 5~ / Safari 5~
■取得のみのコード
var ret = new Array(); if( navigator.geolocation ){ navigator.geolocation.getCurrentPosition( function( pos ){ //位置取得成功 ret['long'] = pos.coords.longitude; //経度 ret['lat'] = pos.coords.latitude; //緯度 result( ret ); }, function( error ){ //失敗 switch( error.code ){ case 1: ret['msg'] = "位置情報の利用が許可されていません"; break; case 2: ret['msg'] = "デバイスの位置が判定できません"; break; case 3: ret['msg'] = "タイムアウトしました"; break; } result( ret ); } ); } else { //使用不可のブラウザ ret['msg'] = 'このブラウザでは位置取得が出来ません。'; result( ret ); } function result( ret ){ console.log( ret ); }
非同期通信を行う為、ソースが上から順番に読まれるわけではなく、処理順が変わってくるため注意。位置情報取得処理後に違う処理をしたい場合は、考えないといけないのが面倒。
以下にGoogleMapAPIに反映させるサンプルとソース。
■サンプル
http://sample.taitan916.info/geolocation/
■ソース
//サンプルで東京タワーを表示 var currentWindow = null; var sample = { 'x':'35.65858', 'y':'139.745433', 'balloon':'東京タワー' }; var latlng = new google.maps.LatLng(sample.x, sample.y); var myOptions = { zoom: 7, center: latlng, mapTypeId: google.maps.MapTypeId.ROADMAP }; var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); makeMarker(sample); //現在位置の取得 if (navigator.geolocation) { navigator.geolocation.getCurrentPosition( function (pos) { var mapData = { 'x':pos.coords.latitude, 'y':pos.coords.longitude, 'balloon':'現在位置' }; makeMarker( mapData ); }, function (error) { var msg; switch( error.code ){ case 1: msg = "位置情報の利用が許可されていません"; break; case 2: msg = "位置が判定できません"; break; case 3: msg = "タイムアウトしました"; break; } alert(msg); }); } else { alert("本ブラウザではGeolocationが使えません"); } //マーカー作成 function makeMarker( mapData ){ var marker = new google.maps.Marker({ position : new google.maps.LatLng(mapData.x,mapData.y), map: map }); var infoWindow = new google.maps.InfoWindow(); google.maps.event.addListener(marker, 'click', function() { if (currentWindow) { currentWindow.close(); } infoWindow.setContent(mapData.balloon); infoWindow.open(map,marker); currentWindow = infoWindow; }); }
■その他
ブラウザによってリロードのたびに許可を求められるものと求められないものがあった。一度取得したものは10分ぐらいキャッシュさせとくのが良いかも。
関連記事
-
-
画像をアップロードすると複数サムネイルを生成する方法
フォームで画像をアップロードすると、予め定めておいた大中小のサイズでサムネイル画 ...
-
-
FLASHから受信した画像をPHPで保存し、サムネイルも作る
■参考サイト ・FLASH http://www.ilovex.co.jp/bl ...
-
-
GASでNintendo Storeをチェックし指定したソフトが〇円以下の際に通知する方法
Nintendo Storeで指定したソフトが指定した価格以下もしくは未満の際に ...
-
-
PHPの配列でキーの最大値を取得
PHPの配列でキーの最大値を取得したかった。以下で対応する。 $test = a ...
-
-
エラー管理
<? /*エラー管理*/ //画面上にエラー表示させるかどうか。0⇒非表示 ...
-
-
PHPでもキャッシュで画像が表示されない
ここみたいにキャッシュの影響と考えられるケースが発生した。 結果的にキャッシュっ ...
-
-
AjaxのJSONP使用でPHPで作った配列をJSに返す方法
AというサイトからBというサイトにAjax通信し、Bの方ではMySQLに接続して ...
-
-
PHPで配列に特定の値が入っているか検索
PHPで配列に特定の値が入っているか検索して trueかfalseを返したい、と ...
-
-
お名前.comの共用サーバー(SD)でのphp設定
画像のアップロードフォームを作っていて、そういえば最大ファイルサイズは? と思っ ...
-
-
Fatal error: Cannot redeclare 関数名のエラー
自作関数の名前が被っている場合に出現するエラー。 ↓みたいに書いているとエラー。 ...
- PREV
- PHPでファイルを添付してメール送信
- NEXT
- GoogleMapAPIでヒートマップを表示する方法