SoftBankの位置情報は、3GC携帯とそれ以外で、リクエスト方法と取得方法が違います。ここでは主に3GC携帯について説明します。
位置情報のリクエスト
3GC携帯で位置情報を取得するには、下記のようにlocationスキームを使用します。
<a href="location:auto?url=hoge.php">取得</a>
ここでhoge.phpは位置情報の受け取り、処理を行うスクリプトとなります。
location:の後ろには
- cell : 簡易位置情報
- gps : S!GPSナビ
- auto : 端末で優先された測位
のいずれかを指定しますが、特に事情がない限りautoを指定するといいでしょう。
位置情報の取得
3GC携帯で上記のリンクをクリックすると、リクエストヘッダに次の情報が付加されます。
hoge.php?pos=N**.**.**.**E***.**.**.**&geo=wgs84&x-acr=3
ここでそれぞれのパラメータは
- pos=N**.**.**.**E***.**.**.** : 座標値(1/100秒単位で度分秒表記) N は北緯、Sは南緯、Eは東経、Wは西経
- geo=wgs84 : 測地系 { wgs84 | tokyo | itrf }
- x-acr=3 : 精度 { 1:簡易位置情報(300m以上) | 2:S!GPSナビ(50m~300m) | 3:S!GPSナビ(50m以内) }
をあらわします。またリクエストの際に下記のようにして追加パラメータを設定することも出来ます。
<a href="location:auto?url=hoge.php&name=value">取得</a>
以上の方法で度分秒表記(dd.mm.ss.sss)の位置情報を取得することが出来ます。しかしGoogleMapsなどの地図サービスの多くはミリ秒表記(dd.dddddd)を使用しているので、変換が必要になります。
以下に取得→変換のPHPサンプルを示します。
// パラメータの取得 $pos = $_GET['pos']; // 文字列を分割 $pos_arr = explode("E", $pos); $lat = str_replace("N", "", $pos_arr[0]); // 緯度 不要な文字を除去 $lon = $pos_arr[1]; // 経度 $lon_arr = explode('.', $lon); $lat_arr = explode('.', $lat); // 変換 $lon = intval($lon_arr[0]) + intval($lon_arr[1]) / 60 + (intval($lon_arr[2]) + intval($lon_arr[3]) / 1000) / 3600; $lat = intval($lat_arr[0]) + intval($lat_arr[1]) / 60 + (intval($lat_arr[2]) + intval($lat_arr[3]) / 1000) / 3600;
これで変換した緯度・経度を使用すれば、地図サービスを使って地図を表示することが出来ます。
なお、実際に地図を表示する際には地図サービスの測地系にも注意する必要があります。SoftBankでは位置情報取得の際に測地系を指定できるので、利用する地図サービスにあった測地系を指定するといいでしょう。
参考URI
GPS携帯 位置情報 基礎知識
http://www.yaskey.cside.tv/mapserver/note/gps.html