人気ブログランキング | 話題のタグを見る
(PHP)携帯電話でGPS位置情報取得したい
携帯電話でのGPS位置情報の取得方法です。(ほとんど参考元リンクまんまですが。。)

まず、Net_UserAgent_Mobile という PEAR クラスライブラリを使って、キャリア毎にGPS位置情報送信リンクを作成してやります。

今回は Docomo なら FOMA かつGPS機能付き携帯、ソフトバンクなら3G携帯、auはそのままという条件でリンクを作成してます。(auについては Net_UserAgent_Mobile で判断できる情報が少ないため)

で、携帯側でそのリンクを押下すると、GETパラメータで位置情報が渡されるので、それを計算しやすい時の小数点形式にするところまでのソースをのっけてます。

まず、位置情報送信リンク作成側のソースです。

require_once('Net/UserAgent/Mobile.php');
 
//位置情報のリンク
$linkGps = "";
//携帯電話判断 測地系はWGS84
$agent = Net_UserAgent_Mobile::singleton();
if($agent->isDoCoMo() && $agent->isFOMA() && $agent->isGPS() ){
//DocomoかつFOMAかつGPS端末のみ
$linkGps = '<a href="findstore.php" lcs>(docomo)位置情報から検索</a>';
}elseif($agent->isSoftbank() && $agent->isType3GC() ){
$linkGps = '<a href="location:gps?url=findstore.php">(ソフトバンク)位置情報から検索</a>';
}elseif($agent->isEZweb()){
$linkGps = '<a href="device:gpsone?url=http://realstyle.xsrv.jp/m/findstore.php&amp;ver=1&amp;datum=0&amp;unit=0">(au)位置情報から検索</a>';
}
//この後、$linkGps を表示してやります。


そして、パラメータ取得側のソースです。(EscapeHtmlSanitize関数については(PHP)XSSとSQLインジェクション対策を参考)
//携帯からの位置情報パラメータ取得
//docomo,au
if (isset($_GET["lat"]) && isset($_GET["lon"]) ){
$lat = EscapeHtmlSanitize( $_GET['lat']);
$lon = EscapeHtmlSanitize( $_GET['lon']);
}
//softbank
if (isset($_GET["pos"])){
//いっしょくたのパラメータを分割
$pos = EscapeHtmlSanitize( $_GET['pos'] ) ;
preg_match('/([N|S])(.+)([W|E])(.+)/', $pos, $match);
$lat = $match[2];
if($match[1]=='S') $lat = '-' . $lat;
$lon = $match[4];
if($match[3]=='W') $lon = '-' . $lon;
}
 
//位置情報を時の小数点形式に変換
if (isset($lat) && isset($lon) ){
$lat_array = split('[.]', $lat, 3);
$lon_array = split('[.]', $lon, 3);
if(count($lat_array)==3 && count($lon_array)==3){
if( $lat_array[0] >= 0){
$lat = ( ( $lat_array[2] / 60 ) + $lat_array[1] ) /60 + $lat_array[0];
}else{
$lat = ( ( $lat_array[2] / 60 ) + $lat_array[1] ) /60 + $lat_array[0] * -1;
$lat = -1 * $lat;
}
if($lon_array[0] >= 0){
$lon = ( ( $lon_array[2] / 60 ) + $lon_array[1] ) /60 + $lon_array[0];
}else{
$lon = ( ( $lon_array[2] / 60 ) + $lon_array[1] ) /60 + $lon_array[0] * -1;
$lon = -1 * $lon;
}
}
$lon = str_replace('+', '', $lon);
$lat = str_replace('+', '', $lat);
}



簡易位置情報や2Gの携帯とかはまた取得方法が違う用なので、それらも対応しようとすると厄介ですね。。。。


参考:
Utilz: 携帯位置情報(GPS):
GPS携帯 位置情報 基礎知識:
携帯の位置情報を取得する:
日々是作譜:DoCoMo、au、SoftbankのGPSで位置情報をphpで取得する方法 (このサイトが一番わかりやすかったかも)
by jehoshaphat | 2009-09-17 16:30 | PHP開発


<< (PHP)携帯電話から取得した... (PHP)echoで変数デバッ... >>