3流プログラマのメモ書き

元開発職→社内SE→派遣で営業支援の三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。(jehupc.exblog.jpから移転中)

(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 = '(docomo)位置情報から検索';

}elseif($agent->isSoftbank() && $agent->isType3GC() ){

$linkGps = '(ソフトバンク)位置情報から検索';

}elseif($agent->isEZweb()){

$linkGps = '(au)位置情報から検索';

}

//この後、$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で取得する方法 (このサイトが一番わかりやすかったかも)