せどり 無料携帯サーチ978対応開発記
2026
2025
2024
2023
2022
2021
2020
2019
2018
2017
2016
2015
2014
2013
2012
2011
2010
2009
1月
2月
3月
4月
5月
6月
7月
8月
9月
10月
11月
12月
全1件 (1件中 1-1件目)
1
携帯の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 ) ) )"
2011.01.26
コメント(5)