携帯電話のGPSの仕様、携帯サイトでの位置情報の取得方法。
携帯電話というのはフィーチャーフォン、いわゆるガラケーのことで、古い携帯電話の話です。 スマートフォンのGPS(位置情報)の話は JavaScript でスマホの位置情報(GPS)、緯度・経度を取得する に書いたので、そちらをご覧ください。
以下、3G以降のGPS対応機種での位置情報の取得方法について記します。 位置情報は、値を取得するたびに微妙に異なります。 また位置情報は正確なものではなく、あくまで参考値です。
ドコモは、iエリア、GPS(mova)、GPS(FOMA以降)など、いくつか位置情報を取得する方法があります。 ここではFOMAの位置情報の取得について書きます。 サイトの制作手順としては規定のリンク方法でリンクを書き、遷移先のページでドコモ側から送られてくる位置情報を受け取るだけです。
aタグやformタグにlcs属性を追加すると、遷移先のページで位置情報を取得できます。
aタグの場合 <a href="./gps.cgi" lcs>サンプル</a> formタグの場合 <form method="post" action="./gps.php" lcs> <input type="submit" value="検索"> </form>
リンクを選択すると端末側でウィンドウが表示され、「現在地確認」を選択すると測位が始まります。 測位後、情報通知の確認画面が表示されるので、「はい」を選択すると遷移先のページで位置情報を取得できます。
以下の値が自動的に送られてきます。 サイトからパラメータとして送出する必要はありません。
GETで送信した場合はGET、POSTで送信した場合はPOSTで送られてきます。
$lat = $_GET{'lat'}; $lon = $_GET{'lon'}; $geo = $_GET{'geo'}; $xacc = $_GET{'x-acc'}; $result = "緯度:" . $lat . "<br>\n" . "経度:" . $lon . "<br>\n" . "測地系:" . $geo . "<br>\n" . "測位レベル:" . $xacc; echo $result;
auに関しては「簡易位置情報」と呼ばれる位置情報の取得について書きます。 サイトの制作手順は基本的にドコモと同じです。
以下のようなリンクを指定すると、遷移先のページで位置情報を取得できます。
<a href="device:location?url=http://sample.com/gps.php">サンプル</a>
$lat = $_GET{'lat'}; $lon = $_GET{'lon'}; $datum = $_GET{'datum'}; $unit = $_GET{'unit'}; $result = "緯度:" . $lat . "<br>\n" . "経度:" . $lon . "<br>\n" . "測地系:" . $datum . "<br>\n" . "座標系:" . $unit; echo $result;
ソフトバンクに関しては、3GC型端末以降の位置情報の取得について書きます。 サイトの制作手順は基本的にドコモと同じです。
以下のようなリンクを指定すると、遷移先のページで位置情報を取得できます。
<a href="location:auto?url=http://sample.com/gps.php">サンプル</a>
上記のautoは、端末にて優先されている測位方法で測位することを表します。 ほかには、gps(GPS位置情報による測位)、cell(簡易位置情報による測位)があります。
以下のサンプルは、ドコモと同じ書式になるように緯度と経度を抽出しています。
$pos = $_GET{'pos'}; $geo = $_GET{'geo'}; $xacr = $_GET{'x-acr'}; preg_match("/^([NS0-9.]+)([EW0-9.]+)$/", $pos, $match); $nsew = array('N', 'S', 'E', 'W'); $pm = array('+', '-', '+', '-'); $lat = str_replace($nsew, $pm, $match[1]); $lon = str_replace($nsew, $pm, $match[2]); $result = "緯度:" . $lat . "<br>\n" . "経度:" . $lon . "<br>\n" . "測地系:" . $geo . "<br>\n" . "測位精度:" . $xacr; echo $result;
通常Google Maps APIは、JavaScript(Ajax)を使用するので携帯電話では利用できません。 携帯電話でもAPIを使えるように Google Static Maps API という地図の画像を取得できるAPIがあります。
<img src="http://maps.google.com/staticmap?center=35.65641,139.699477&zoom=10&size=300x300&markers=35.65660,139.699477,reda&maptype=mobile&key=[Google Maps API Key]">
markersとmaptypeの指定は任意で、その他は必須です。 マーカーの文字は、色の指定の後カンマを付けずに続けて半角英字(小文字)を1文字書きます。 文字を指定しない場合は、点になります。 Google Maps API キーは、Googleのサイトで取得します。 API キーは、Googleのサイトで登録したURLの配下でのみ使用できるので、各自登録する必要があります。
上の方で説明した携帯電話の位置情報の取得方法で $lat に緯度、$lon に経度を取得します。 携帯電話の緯度・経度の表記は60進法ですが、Googleは10進法を利用しているので、以下の例のように10進法に変換する必要があります。 緯度・経度の+の符号は、あってもなくても動作します。
preg_match("/^([\+\-0-9]+)\.([0-9]+)\.([0-9.]+)$/", $lat, $lat_match); preg_match("/^([\+\-0-9]+)\.([0-9]+)\.([0-9.]+)$/", $lon, $lon_match); $latx = $lat_match[1] + ($lat_match[2] / 60) + ($lat_match[3] / 60 / 60); $lonx = $lon_match[1] + ($lon_match[2] / 60) + ($lon_match[3] / 60 / 60); $ima_tag = "<img src=\"http://maps.google.com/staticmap" . "?center=" . $latx . "," . $lonx . "&markers=" . $latx . "," . $lonx . ",greena" . "&zoom=15" . "&size=300x300" . "&maptype=mobile" . "&key=ABQIAAAAmlrgRT0xjXnY98QiNflUdRTDqfjLNrt2ir9hHOBNcG0FRxNZZhR8meMu8Xad3DowrfpAvAhzGIqzOQ" . "\">"; echo $ima_tag;