Google Static Maps APIで地図表示させるための準備

Google Maps API v3については一通りあっちのblogで書いてきたので、ここからはGoogle Static Maps API(v2)で色々とやってみることにする。

位置情報の取得

GPSやらの機能で、ケータイ端末から位置情報を取得する。
Googleで検索したりして色々と情報を集めつつ、テストしてみた結果を。

参考にさせてもらったのは以下のサイト二つと、各キャリアの技術情報。
(1)携帯の位置情報を取得する
(2)GPS携帯 位置情報 基礎知識

なんとなくは予想してたけど、やっぱりキャリアごとに取得方法が異なる。
面倒。

手っ取り早く、Firefoxのアドオンを利用する。
FireMobileSimulator.org
残念なことに、SoftBankの位置情報には対応していない。

Google Maps API v3のテスト用に変換してあった緯度経度を60進に変換して、ブラウザに設定。

DoCoMoの位置情報

一応、DoCoMoのサイトを参照。
GPS | サービス・機能 | NTTドコモ

さらに上の(1)を参考に、submitボタンだけのフォームを作って、$_SERVER['PHP_SELF']にPOSTしてみる。

…動かねー。

っと、フォームタグの後ろに入れるのは「1cs」じゃなくて「lcs」ね。「locations」ってこと?

print_r($_POST);

これでPOSTされた値を表示させる。

Array ( )

おい!

アドレスバーを確認すると、こうなっていた。
http://localhost/XXX/index.php?lat=+NN.NN.NN.NNN&lon=+NNN.NN.NN.NNN&geo=wgs84&xacc=3&alt=+NN.NNN
※Nは任意の数字ね。

つまりGETになってる。
ちゃんとmethod="POST"にしたんだけどなぁ。

念の為、同じソースをiモード HTML シミュレータで試してみると、きちんとPOSTされた。
まさか、このアドオンがPOSTできない!?と思ってformタグからlcsを外すと、submitボタンのvalueと実験用にセットしておりてhidden項目をPOSTとして受け取れる。
lcsを指定すると、methodの指定は無視ですか?
まぁ、仕方ない。

auの位置情報

簡易位置情報を取得してみる。

<a href="device:location?url=<?php echo $_SERVER['PHP_SELF']; ?>">位置情報を取得する</a>

クリック!

未サポートの機能です。
※ブラウザの機能で戻ってください。

えぇーっ!?

<a href="device:location?url=http://localhost<?php echo $_SERVER['PHP_SELF']; ?>">位置情報を取得する</a>

こうしないとダメでした。

Array (
[datum] => tokyo
[unit] => dms
[lat] => +NN.NN.NN.NNN
[lon] => +NNN.NN.NN.NNN
)

datumがDoCoMoでいうところのgeoか。

今度はGPSを使ってみる。

<a href="device:gpsone?url=http://localhost<?php echo $_SERVER['PHP_SELF']; ?>">位置情報を取得する</a>

Array
(
[ver] => 1
[datum] => 0
[unit] => 0
[lat] => +NN.NN.NN.NNN
[lon] => +NNN.NN.NN.NNN
[alt] => 50
[time] => 201003031523
[smaj] => 100
[smin] => 100
[vert] => 100
[majaa] => 60
[fm] => 1
)

公開されている資料だと、パラメタは省略不可と書いてあったが、OKなんだな。
http://www.au.kddi.com/ezfactory/tec/spec/doc/kaniichijyouho.doc
つまりはこれがデフォルトってことか。


今度はパラメタをガッチリ設定してみる。

<a href="device:gpsone?url=http://localhost<?php echo $_SERVER['PHP_SELF']; ?>&amp;ver=1&amp;datum=0&amp;unit=1&amp;acry=0&amp;number=0">位置情報を取得する</a>

内容はこうだ。順番に注意。

  • 使用するバージョン(固定値)
    • ver=1
  • 日本測地系から基準測地系に変更する
    • datum=0
  • 緯度経度を60進法(度分秒)ではなく10進法で取得する
    • unit=1
  • 以下は固定値。
    • acry=0
    • number=0

取得できたのはこれ。

Array
(
[ver] => 1
[datum] => 0
[unit] => 1
[lat] => NN.NNNNNNNNNNNNN
[lon] => NNN.NNNNNNN
[alt] => 50
[time] => 201003031513
[smaj] => 100
[smin] => 100
[vert] => 100
[majaa] => 60
[fm] => 1
)

折角60進法じゃないパターンで受け取れるなら変換する必要がなくなる。それはそれでいいけど、他のキャリアとの兼ね合いもあるしな。度分秒のパターンのがいいか。

SoftBankの位置情報

送信出来ないけど、技術情報くらい確認しようと思ったら、登録が必要だって?
それくらいはダウンロードさせてくれてもいいのになぁ。

うーん…

シミュレータ(ウェブコンテンツヴューア)も欲しいし、登録することにした。
これでSoftBankも試せる…

…と思ったけど、位置情報の設定が面倒だ。
「オプション」→「HTTPヘッダ」を開くと、「位置情報を通知する(E)」という項目がある。

pos(3GC)としてテキストボックスがひとつだけ…

まさか位置情報として受け取る値をそのまま入力させられるとは思わなかったぞ。

上にある「x-emulator-geocode」はウェブコンテンツヴューア用のパラメタなんだな。

マニュアルを確認。
HTML編であるA-005-111-HTML_2.0.2.pdfを。
古い機種向けっぽいx-jphone-geocode(x-emulator-geocode)は無視して、locationスキームを使うパターンで。

マニュアルには以下のように記載されている

pos
位置
度分秒(dms)表記
北緯はN,東経はE,南緯はS,西経はWをそれぞれ頭につけ
1/100 あるいは1/1000 秒単位(※)で表される。それぞれは
「.」で連結される。
※:端末により単位が異なる。

(2)のサイトでは
「3GC型の簡易位置情報」として、以下のように記載されている。

pos=N**.**.**.**E***.**.**.** 座標値(1/100秒単位で度分秒表記) N は北緯、Sは南緯、Eは東経、Wは西経

http://www.yaskey.cside.tv/mapserver/note/gps.html#GPS_SoftBank

なので、設定にはN11.11.11.11E111.11.11.11というように入力する必要があるようだ。

こいつで試す。

<p><a href="location:auto?url=http://localhost<?php echo $_SERVER['PHP_SELF']; ?>">位置情報を取得する</a></p>

Array
(
[pos] => N11.11.11.111E111.11.11.111
[geo] => wgs84
[x-acr] => 1
)

座標の最後が三桁なのは、他のキャリアで試した値をそのまま使ったので三桁のままで試したから。
とりあえず入力した値がそのまま送られるようなので、注意が必要。
試しに"test"と入力したら"test"という文字列が取得できた。ここらはちゃんとしてほしいな。
geo、つまり測地系は設定画面で変更できるので、実際の端末はどうなのか、仕様を確認しておく必要があるか。

受け取った値はバラす必要があるな。こっちは面倒だから、後回し。


ちなみに我がWILLCOMSoftBankと同じposパラメタで、同じ書式で受け取れるらしい。
WILLCOM|位置情報の取得方法

測地系

取得する位置情報の測地系は「日本(Tokyo)測地系」です。

とのこと。

こっちはシミュレータもないし、自分のアドエスつなぎたくないので、テストしない。
書式が同じだからSoftBank用でいいか。

…とまぁ、ここまでが事前の準備の一つってことで(疲れた)。