携帯電話のGPSとGoogle Map APIについてのまとめ
Thu, Nov 20, 2008最近の携帯電話には、GPS機能がついていますが、この機能とGoogle MapのAPIを使って現在の地点を地図上で知ることが出来るサービスを作ることができます。
Google MapのAPIは以前は対象をPCのみとしていたようですが、2008年の2月に携帯にも対応したAPIを発表したようです。使い方はいたってシンプルで、imgタグのsrc要素に指定されたURLと経度・緯度・APIキーなどの情報をGET形式で指定するだけです。詳しくはke-tai.orgさんのサイトをご覧ください。
ke-tai.org > Blog Archive > 「Google Static Maps API」を使って携帯でGoogleマップを表示する
ただし、Googleに渡すデータの経度・緯度情報は世界標準の形式で無ければいけないのに対し、日本の携帯のGPSは日本独自の形式で経度・緯度情報を出力するため、これを世界標準の形式に変換する作業が必要になります。具体的には、下記の作業が必要になります。
- (日本)60進法 ⇒ (世界)10進法
- (日本)日本測地系 ⇒ (世界)世界測地系
これらの変換作業について説明する前に、まずは経度と緯度について詳しく知っておくと良いでしょう。何故、経度や緯度は角度で表現されるのかご存知ですか?管理人は恥ずかしながら今まで知りもしなかったし、何故角度で表すのか疑問に思うこともありませんでした。やはり、何事にも「何故?」と疑問を持って検証するって大切ですね。下記の企業様のサイトが非常に分かりやすいです。
経度緯度とは?
緯度経度とは? | GIS用語集 | GIS用語集と使い方 | 株式会社パスコ
ざっくり説明すると、緯度は赤道と地球(球体)の中心を通る面を0度、北極・南極と地球の中心を通る面を90度とし、これらを基準にして対象となる場所が何度になるかということですね。経度は旧グリニッジ天文台跡(ロンドン)を通る南北の線、初子午線が基準になるようですね。簡単に日本を表してみました。
60進法と10進法
日本は角度の小数点以下を60進法で表します。何故なんでしょう・・・。Google APIに渡す値は10進法にしなければならいので、60進法に変換します。変換の計算式はF.Ko-Jiさんのブログが参考になります。
経度・緯度を60進法から10進法へ変換 – F.Ko-Jiの「一秒後は未来」
日本測地系と世界測地系
日本の携帯は日本測地系を基準にしているのに対し、Google APIは世界測地系を基準としています。日本測地系のまま、値を渡してしまうと国内で400mほどの誤差が生じてしまうようです。詳しくは下記サイトをご覧ください
GPSにとって400mは結構な誤差なので、これも変換する必要があります。三角関数を使用しない簡単な方法が下記サイトにて紹介されています。
各キャリアの違い
最後にキャリアの違いについて。これは、PHPプロ!さんのサイトに詳しい情報が載せられています。どのキャリアも特定のリンクにアクセスさせた後、GET値にてGPS情報を提供してくれるようです。auとDoCoMoは経度と緯度をそれぞれ「lat」「lon」で、softbankとWillcomは「pos」に「N**.**.**.**E*\**.**.**.**」形式で、返してくれるようです。
PHPプロ!TIPS+ 携帯電話でGPSデータを取得してみよう
まとめ
携帯電話のGPS機能とGoogle Map APIを組み合わせて、携帯画面に現在地点の地図を表示するまでの手順を下記にまとめます。
- 各キャリア別にGPS取得のリンクを表示させて、そのリンクにアクセスさせる。
- リンクにアクセスするとGET変数でGPS情報の値を取得できるので、経度、緯度の2つの情報をそれぞれ変数に格納する。
- 60進法を10進法に変換する。
- 日本測地系を世界測地系に変換する。
- 経度・緯度の情報をAPIキーと一緒に、Google Map APIに渡して、地図画像を表示する。(centerに経度・緯度情報を指定しますが、markerもcenterと同じ値を指定すればよいでしょう。)