web製作部: 2007年11月アーカイブ
いよいよ GPS で住所を取得して google マップⅰアプリにコピペで渡せる仕組みを作ってみた。それだけではつまらないので現在地の地図画像を表示し、ついでに現在地をメールで送れるようにした。
地図画像はこちらのブログ( google local の地図画像を抜き出して使う - ZeroMemory )を参考に、Google のサービスを利用した。経度緯度を数字の桁(ドット)を取ってそのまま突っ込んでみたところ、地図がちゃんと表示されなかった。これは小数点以下6桁までに数字を丸めたら上手くいった。
メール送信のリンク部分では、このようにメールタイトルとメール本文を渡している。
<a href="mailto:?subject=~~~&body=~~~">現在地をメールで送る</a>
メール本文中の改行コードは %0D%0A である。
またメール本文中にも Google の地図画像へのリンク URL を記載しているが、文字数を節約するために経度緯度情報のみで一旦自分のサーバに飛ばし、そこから Google のリンク URL にリダイレクトしている。
出来たのがこのページ。すこし使ってみたところ、(1) InvGeoCoder から住所を取得する際に 503 エラーが出ることがある(2) Google の地図が正しく生成されず、黒、青色(海)、ベージュ色(地面)のベタ塗り画像になることがある、という問題が出てきた。
(1)に関してはエラーの表示と表示の更新を促すメッセージを表示するようにし、(2)は Yahoo の地図画像生成サービスがあるようなのでそっちに変更して様子を見るつもり。

いよいよ GPS から現在位置情報を取得してみるのだ。技術情報はドコモのサイトにあるにはあるが、簡素すぎてわかり難かった。要するにこういうことだ。
Aタグ
<a href="http://(自分の作った、次に飛ばしたいページ)" lcs>
FORMタグ
<form method="get" action="http://(自分の作った、次に飛ばしたいページ)" lcs>
<input type="submit" name="test" value="検索">
</form>
このように a タグ、form タグの最後に lcs を付ける。そしてそのリンクやボタンをクリックすると携帯の GPS 機能が立ち上がり、位置情報送信の許可をすると以下の URL にジャンプする。
http://(自分の作った、次に飛ばしたいページ)?lat=%2B35.00.35.600&lon=%2B135.41.35.600&geo=wgs84&x-acc=3
で、これら4つの値を拾えばいい。ドコモの説明の例では http://www.docomo.co.jp/gps.cgi?~ と書いてあったから、オープンiエリアの位置情報取得と同様にドコモのサーバにアクセスしないといけないのかと思ったよ。
これで軽度・緯度が取得できたのだが、60進法の度分秒での表記なので10進法表記に変換する。この計算式はこちらのブログを参考にさせて頂いた:経度・緯度を60進法から10進法へ変換 - F.Ko-Jiの「一秒後は未来」
さらに変換した経度・緯度から住所を取得する。これは InvGeoCoder という WebService をそのまま利用させて頂いた。
これで GPS から現在地住所を取得できるようになった。これから何をしたいのかというと、GPS の機能がない Googleマップiアプリに対して手動コピペで現在地住所を渡して、Googleマップiアプリで「今いる場所の航空写真」を見れるようにしたいのだ。

前回オープンiエリアの位置情報(エリアコード)を取得するところまでいったので、今回はそのエリアコードから詳細情報を取得する部分を付け加えた。といっても特に難しいことはなくて、「iarea00000(エリアコード:5桁の数字).txt」というエリアデータのファイルを読み込むだけ。するとその中にエリア名や沢山の緯度経度情報がコンマ区切りで入っているという訳。
出来たのがこのページ。データを読み込んで表示させるのはすぐに出来たが、悪い予感が的中して文字によるエリア名の表示部分が文字化けしてしまう(「溝の口」の「溝」、「港北ニュータウン」の「港」)。これは php スクリプトとエリアデータの文字コードが shift-jis なのが原因ではないかと思う。shift-jis で php スクリプトを作るのは気持ち悪いけれど、docomo の携帯サイトは shift-jis で作らないといけみたいなので仕方が無い。
いろいろ考えれば対応方法を思いつくかもしれないけれど、とりあえず今回はオープンiエリアを取得する事が目的だったので、深追いせずにこれでよしとする。次はいよいよ GPS に挑戦するのだ。

ネットでいろいろ見ているうちに、iモードの web ページから位置情報を取得できることを知った。ドコモ公式メニューのグルメ・クーポン系サイトでよく見かける手法だが、自分でも簡単に出来るという事には気づかなかった。
現在、ドコモの携帯端末からその位置情報を取得する方法はオープンiエリアと GPS の2通りがあるが、まずは簡単そうなオープンiエリアでチャレンジすることにした。
早速ドコモのサイトでオープンiエリアの説明書に目を通してみたところ、こちら(自分が作成する iモードの web ページ)から A タグか FORM タグでドコモ指定のアドレスにアクセスするとオープンiエリアのエリアコードが返ってくるという仕組みであることがわかった。
久しぶりの php スクリプト作成なのでどうなることかと思っていたら、書き出しから何から忘れていたので大いに焦った。解説書と i モード対応 html タグ一覧 を見ながらどうにかエリアコードを取得することに成功。i モードで同じ URL へ再度アクセスした場合に初回表示時のキャッシュが表示されてしまうという癖があるが、エリアコード取得後に同じ URL へ戻った場合はちゃんと新しいデータを読み直しているようだ。
出来たのがこのページ。ドコモの携帯からアクセスしないと位置情報が取得できずエラーが表示される。これはドコモの仕様だそうです。


