062399 ランダム
 HOME | DIARY | PROFILE 【フォローする】 【ログイン】

せどり 無料携帯サーチ978対応開発記

せどり 無料携帯サーチ978対応開発記

【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! --/--
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x

PR

Freepage List

Profile

GEφ

GEφ

Archives

2024.06
2024.05
2024.04
2024.03
2024.02

Calendar

2011.01.26
XML
カテゴリ:開発日記
携帯の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;


そして、クエリー式
ちなみに、latlonは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 ) ) )"





お気に入りの記事を「いいね!」で応援しよう

Last updated  2011.01.27 13:45:28
コメント(5) | コメントを書く
[開発日記] カテゴリの最新記事


Keyword Search

▼キーワード検索


© Rakuten Group, Inc.