ひとりあそび協会でタグ「GPS」が付けられているもの
やっぱり携帯サイトを作るぞ(クレヨンしんちゃん風に)の続き。
とりあえずこのページがそれ。アクセスしたときにPC、iモード、SoftBank、auそれぞれで別のページを表示するようにしてみた。とは言っても作りこみはしてなくて、PCから見たときはiモードに誘導するためのQRコード画像を表示、SoftBankとauではテキストでSoftBank、auという文字を表示しているだけ。たしかこの2つのキャリアはhtmlタグ(のようなもの)が異なるので、後日ちゃんと仕様にあわせなきゃいけない。「ドコモ専用です」と表示させるだけなんだけど。
んでiモードからアクセスするとiモード用のページが表示される。これは前回作って放り出したものを、仕組みを忘れてよくわからないまま使い回している。とりあえずgoogleマップの地図画像を使うと上手く表示されないことがあるので、Yahoo!の同等サービスを使おうとしていたことは覚えている。あとGPSの位置測定基準が2種類あるようなので、その両方に対応できるようにしなければいけない。世界測地系とか何とか。
経度緯度から住所を取り出すapiが頻繁に503エラーになるので、取得できなかったときにはメッセージを表示するようにした。
$url = 'http://nishioka.sakura.ne.jp/google/ws.php?lon='.$lon0.'&lat='.$lat0.'&format=simple';
@$aryaddress = file( $url );
if( $aryaddress == "" ){$err = "住所取得に失敗しました(503)";}
さてさて。次はどうしようかな。
去年秋にGPSを使った携帯サイトを作りかけていた。そのときはまだGPSに連動していなかったgoogleマップのiアプリに所在地を渡して擬似的に連動させるのが目的だったんだけど、やっぱりというか当然というか、いろいろやっているうちにgoogleマップiアプリがGPSに対応するようになったので作るのが面倒になって…飽きちゃった。
けど、そのときについでに作った「現在地をメールで送る機能」は思い起こせばなかなか便利なものだった。携帯で写真を撮りそのままメモとして自分に送ったり、「今ここにいるよ~」と友達に送ったりと、単純ながら使える。
そこで忘れたことを復習しながら、このシンプルな機能に特化した携帯サイトを完成させようと思う。内容はこんな感じ
- トップページにアクセスしたときにPCと携帯に自動的に振り分け
- PCからアクセスしたときはサイトの説明とQRコードを表示
- 携帯(iモード)からアクセスしたときは位置取得ボタンを表示→位置取得→メールリンク表示
- メール内に地図画像へのリンク(phpを挟んでURL短縮化)
とりあえずiモードでメーラーを起動するときはタイトル30バイト、本文500バイト以内でurlエンコードが必要(→iモード対応HTMLタグ一覧 : subject, body属性 | サービス・機能 | NTTドコモ)
いよいよ 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アプリで「今いる場所の航空写真」を見れるようにしたいのだ。

