MEMORVA
ウェブサイト制作 HTML/JavaScript モバイル Linux 開発 サイト運営

携帯GPSの仕様 - 位置情報(緯度・経度)、地図・座標、Google Static Maps APIの利用

更新:

携帯電話のGPSの仕様、携帯サイトでの位置情報の取得方法。

携帯電話の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>

リンクを選択すると端末側でウィンドウが表示され、「現在地確認」を選択すると測位が始まります。 測位後、情報通知の確認画面が表示されるので、「はい」を選択すると遷移先のページで位置情報を取得できます。

送信される値

以下の値が自動的に送られてきます。 サイトからパラメータとして送出する必要はありません。

取得例(PHP)

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

auに関しては「簡易位置情報」と呼ばれる位置情報の取得について書きます。 サイトの制作手順は基本的にドコモと同じです。

リンクの書き方

以下のようなリンクを指定すると、遷移先のページで位置情報を取得できます。

<a href="device:location?url=http://sample.com/gps.php">サンプル</a>

送信される値

取得例(PHP)

$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(簡易位置情報による測位)があります。

送信される値

取得例(PHP)

以下のサンプルは、ドコモと同じ書式になるように緯度と経度を抽出しています。

$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 Static Maps API(グーグルマップ)

通常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の配下でのみ使用できるので、各自登録する必要があります。

携帯電話で地図を表示するサンプル(PHP)

上の方で説明した携帯電話の位置情報の取得方法で $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;

はてなブックマーク X Bluesky