PHPに惚れました

今でも多分惚れてます。

PHP+GPSで現在位置情報を取得する

今日はPHPでGPSを扱う練習を〜(もちろん位置情報の取得は携帯でです。)

1から組むのは当然大変そうなので「PEAR::Net_UserAgent_Mobile_GPS」を利用しました。

GPS検索を扱う際、3キャリアでコードが違ってきますがそれを解消してくれるスグレモノです。

ちなみに最新バージョンも0.1.1と開発途中ですが、GPSが絡むサービスはコレを使うのがもう一般的らしいです。

まずはNet_UserAgent_Mobile_GPSのインスコ。
位置情報(緯度経度)の取得だけならこれ以外に入れるものは特にありません。

<?php
    //まずはライブラリをインクルード。
    require_once 'Net/UserAgent/Mobile/GPS.php';

//try-catchで例外にも対応させます。
//ここでよくある例外ってのはモバイル端末以外からアクセスされた時の処理。
//モバイル端末からアクセスしてね!ってな感じのエラー文が表示されます。
try {
    $g = Net_UserAgent_Mobile_GPS::factory();
} catch (Net_UserAgent_Mobile_GPS_Exception $e) {
    var_dump($e->getMessage());
    exit();
}

//取得後の処理を行うページ
$url = "http://ddhost.no-ip.info/deltacolors/t.php";
//リンクに表示する文字
$str = 'GPS.TEST';
//各キャリア毎のリンク取得
$glink = $g->getGPSLink($url, $str);

print $glink["tag"];

?>

リンクの生成はこれでOK。

次に、値を取得し処理を行う。

<?php
require_once("Net/UserAgent/Mobile/GPS.php");

//小数点以下60進数の値を10進数にへ関する関数
function dmsToDeg($dms){
    $dms = array_pad(explode('.',$dms),4,'0');
    $deg = $dms[0] + $dms[1]/60 + ($dms[2].'.'.$dms[3])/3600;
    return round($deg,9);
}

$res = $g->getGPSResponse();
print dmsToDeg($res['lon']);
print dmsToDeg($res['lat']);
?>

これで緯度経度が取得出来た。

後はこの数値を元に都道府県や市区町村を取得する「逆GeocodingAPI」にかければOK。

逆GeocodingAPI参考サイト
座標から地名を取得する逆GeocodingAPIのまとめ + サンプル : アシアルブログ


[お願い]
ただし自分の携帯でしかチェック出来ないので取得結果をコメントで報告してくれたら助かります。

テストページQRコード
f:id:Xephy:20100210042846p:image

URL:
http://ddhost.no-ip.info/deltacolors/t.php

短縮URL:
http://bit.ly/92pP5r

欲しい情報まとめておきます。

    • 緯度経度の数値([←]の部分)が表示されたかどうか。
        • Simple_XML_Elementの表示の可否は結構です。
    • 機種名
    • Simple_XML_Elementが「検索範囲外」と出た時は位置取得を試した都道府県(差し支えなければで結構です)