|
カテゴリ:開発日記
携帯のGPSは各社と言うか、大きく分けて2種類の値が返ってくるようになっている。
1つは、緯度と経度が別々のGETパラメータで返ってくる もうひとつは、ポジションとして、緯度と経度がひとつのGETパラメータで返ってくるものである。 GETパラメータがあるかどうかの確認は、isset関数で確認できるので、簡単にではあるが、取得方法をプログラムすると以下コードで取得できる。 if( isset($_GET['pos']) ) { // ---------------------------------- // Softbank / WILLCOM // ---------------------------------- $vowels = array("N", "S" , "n" , "s"); $pos = split( '[ewEW]' , str_replace($vowels , '' , $_GET['pos'] ) ); $lat = $pos[0]; // 緯度 $lon = $pos[1]; // 経度 } else { // ---------------------------------- // DoCoMo / au // ---------------------------------- // 緯度 $lat = trim((!empty($_POST['LAT'])) ? $_POST['LAT'] : $_GET['lat']); // 経度 $lon = trim((!empty($_POST['LON'])) ? $_POST['LON'] : $_GET['lon']); } 取得した携帯のGPS情報はGoogleの表記と違う。 携帯の表記は、度分秒表記で、Googleは度らしい。 表記:[角度].[分].[秒].[コンマ秒] 上記のフォーマットなので、小数点での表記にしてGoogleへ投げないと、正確な位置ではなくなる。 計算方法は [角度]+([分] ÷ 60)+([秒] ÷ 3600) // 取得したパラメータを[.]文字で分割して取得 $arylat_rd = split( '[.]' , $lat ); $arylon_rd = split( '[.]' , $lon ); // Googleで利用できる形に変換 $lat_rd = $arylat_rd[0] + ( $arylat_rd[1] / 60 ) + ( $arylat_rd[2] / 3600 ); $lon_rd = $arylon_rd[0] + ( $arylon_rd[1] / 60 ) + ( $arylon_rd[2] / 3600 ); 簡単になので、エラーとか考えるとどうなるんだろう^^; ■距離を計算するクエリー 計算式の参考はくらげだらけさんのPHPの式を参考にしました。いやぱくった。。。あっΣ( ̄▽ ̄ノノ その前に、座標はラジアンの単位にしないと正確な距離が出ないとの事なので、以下の式で取得。どうも関数はあるらしいのだが・・・解りやすくしたいので、簡単に式で計算www $d_lat_rd = $lat_rd * M_PI / 180.0; $d_lon_rd = $lon_rd * M_PI / 180.0; そして、クエリー式 ちなみに、latとlonはDBに登録されている位置情報のカラム名である。 くらげだらけさんのサンプルはmで計算できるのでかなり良いです。(^v^b 使ったのはorder句なので、とりあえずそのまま載せますが、order byを取ればカラムとして使えるはずですよ。。。 " order by round( sqrt( power( ( 6335439.327 / sqrt( power( ( 1 - 0.00669438 * power( sin( (" . $d_lat_rd . " + (lat * PI() / 180 - " . $d_lat_rd . " ) / 2 ) ), 2 ) ), 3 ) ) ) * (" . $d_lat_rd . " - lat * PI() / 180 ), 2 ) + power( ( 6378137 / sqrt( ( 1 - 0.00669438 * power( sin( (" . $d_lat_rd . " + (lat * PI() / 180 - " . $d_lat_rd . " ) / 2 ) ), 2 ) ) ) ) * cos( (" . $d_lat_rd . " + (lat * PI() / 180 - " . $d_lat_rd . " ) / 2 ) ) * (" . $d_lon_rd . " - lon * PI() / 180 ), 2 ) ) )" お気に入りの記事を「いいね!」で応援しよう
[開発日記] カテゴリの最新記事
|
|