携帯端末からのGPS位置情報取得::SoftBank

By mizoguchi - 08/10/28 - このエントリをはてなブックマークに追加このエントリをYahoo!ブックマークに追加このエントリをdel.icio.usに追加このエントリをFC2ブックマークに追加

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