位置情報取得のプログラムテストが2.0になりました。御参加いただけるなら右上の「テストの参加」をクリックして下さい。ただしとても技術的なテストですので、小学生諸氏は独断でクリックしないように。
前回の記事「位置情報取得の陣 その1」から早6時間。Google AJAX Search APIにおける訪問者の都道府県情報の取得精度の低さと、だったら有料サービスが...いやいや、お金かけられないぜ!という現実の狭間で、次の手段として用意されていたモノが
W3C Geolocation APIです。
なおW3CとはWorld Wide Web Consortiumの略で、今こうやって見ているWebページの標準規格(つまりルール)を定めている非営利団体です。このW3Cは現在次のバージョンのHTML(HTML5)の策定中で、そこで追加されるであろう仕様が公開されており、モダンブラウザは早くも新しい仕様に対応したバージョンアップを進めています。
HTML5から入る新しい仕様の中で特に今回の目玉となるのがGeolocation APIです。これはブラウザからのアクセスに応じてユーザーの位置情報(緯度・経度など)を取得するための関数群で、携帯端末ではすでにいろいろな方面で活用されています。
W3C Geolocation APIは主にユーザーが自分のために利用するアプリケーション(自分の位置を知るGPS機能等)に組み込まれるものであり、ユーザーの許可無く位置情報を他人に伝えるものではありません。APIを利用するかどうかはユーザーの判断とブラウザのバージョンで決定されます。iPhoneのSafari然り、AndroidのGears(Geolocation APIのちょっと強化版)然りです。
さて、位置情報取得に管理人が何をアツクなってるのかはさておき、プログラムテスト2.0ではこのGeolocation APIを利用します。しかし訪問者にいちいち「API利用を許可しますか」的なダイアログが発生するのはノンストレスサーフィンを目指す理総研では現実的ではありません。HTML5が標準となるその時代を見越してテストを実施し、次の課題に繋げることが必要なのです。
今回のテストの流れはこんな感じです。
- Geolocation APIで緯度・経度を取得
- 緯度・経度をGoogle Maps APIのGClientGeocoderクラスで逆ジオコーディング(地図上のどの辺りの地点か計測)し、JSON形式データ(Placemark)を取得
- Placemarkから住所に関わるデータ(AddressDetails.Country.AdministrativeArea以下)を可能性候補地点として、あるだけ抽出
- ブラウザがGeolocation APIに未対応,APIの利用を拒否,Placemarkを取得できない,以上の場合は前回利用していたgoogle.loader.ClientLocationでの取得を試みる
多大なシェアを誇るInternet ExplorerはVersion9.0からでないとこのAPIには対応していません。その他のモダンブラウザ(Chrome, FireFox, Safari, Opera)は、最新バージョンであるならばすべてこのAPIに対応しています。
....と謳っていますが。
おいSafari、5.0からGeolocation APIに対応とか言ってなかったっけか?
Safariには相当悩まされました。iPhoneのSafariであれば誠実にAPIが稼働していることを確認しましたが、デスクトップのSafari(我が家は5.0.5)では反応がありません。ここが重要です。反応がない、これはエラーを吐かない、という事です。
Safariでは確かにnavigator.geolocationがnullを返さないので、APIに対応していると言えば対応しています。さらにはStatus.codeもG_GEO_SUCCESSを返してきます(返しているような気がする)。おぅ、対応してるやんって思ってもココまでで、ココから先はSafariが気絶している状態です。死んではいないが無反応です。私の言葉が彼女には届きません(私だからか?)。
国内ではこの現象についての文献が見当たらなかったので海外の文献を漁ってみたら、同じ問題を抱えている方(海外の私?)が結構おられました。しかしその解決策は何処にも見当たらず。次のバージョンに期待します。
取得精度が低ければただのゴミプログラムですが、プログラムテストがそこそこの精度結果を出すようでしたら、WebTechにてソースコードを公開・解説します。