(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 = "";
$agent = Net_UserAgent_Mobile::singleton();
if($agent->isDoCoMo() && $agent->isFOMA() && $agent->isGPS() ){
$linkGps = '(docomo)位置情報から検索';
}elseif($agent->isSoftbank() && $agent->isType3GC() ){
$linkGps = '(ソフトバンク)位置情報から検索';
}elseif($agent->isEZweb()){
$linkGps = '(au)位置情報から検索';
}
//この後、$linkGps を表示してやります。
そして、パラメータ取得側のソースです。(EscapeHtmlSanitize関数については(PHP)XSSとSQLインジェクション対策を参考)
//携帯からの位置情報パラメータ取得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の携帯とかはまた取得方法が違う用なので、それらも対応しようとすると厄介ですね。。。。
参考:
日々是作譜:DoCoMo、au、SoftbankのGPSで位置情報をphpで取得する方法 (このサイトが一番わかりやすかったかも)