本日からiPhone3.0のアップデートが可能になりました。
先日お伝えした通り、このメジャーアップデートでブラウザから位置情報を取得できるようになります。
前回の記事「iPhoneのSafariが位置情報取得に対応するそうです」
ということで実際組み込んでみました。
また、3.0の他の新機能をちょこっとレビューしてみます。
位置情報を取得してみる
navigator.geolocation.watchPosition(callback, handleError)
これを宣言すると、そのページにアクセスした時点で以下のようなメッセージが表示されます。他の携帯キャリアと似ています。
引数のcallbackは読んで字のごとくコールバック関数を指定します。
handleErrorはエラーのコールバック関数を指定します。
コールバック関数に与えられる値はそれぞれ以下になります。
引数.coords.latitude | 緯度 世界測地系(WGS84) |
引数.coords.longitude | 軽度 世界測地系(WGS84) |
引数.coords.altitude | 高度 |
引数.coords.accuracy | 精度レベル (メートル) |
引数.coords.altitudeAccuracy | 高度の精度レベル (メートル) |
引数.coords.heading | 方角 (機種によっては取得できない) |
引数.coords.speed | 対地速度(使い道がわかりません) |
エラーの取得
もし、位置情報を取得中にエラーが発生すると、エラーハンドラで指定したメソッドでエラーコードを取得できます。
UNKNOWN_ERROR value 0 | 取得プロセスエラー |
PERMISSION_DENIED value 1 | GPS利用許可エラー |
POSITION_UNAVAILABLE value 2 | 位置情報取得エラー |
TIMEOUT value 3 | タイムアウト |
これらのコードは引数の「code」から取得できます。
簡単なサンプル
sample.html
<html> <head> <style> p { font-size: 12px; color: rgb(0, 220, 98); background-color: black; } body { background-color: black; } </style> <script> var count = 0; var log = ""; function callback(a) { count ++; var d = document.getElementById("d"); d.innerHTML = log = log + "<p> " + count + " lat = " + a.coords.latitude + " long = " + a.coords.longitude + " accuracy = " + a.coords.accuracy + "<a href=http://maps.google.com/maps?geocode=&q="+a.coords.latitude+"+"+a.coords.longitude+"> map </a></p>"; } function handleError(a) { var d = document.getElementById("d"); d.innerHTML = log = log + "<p> error: " + a.code + "</p>"; } navigator.geolocation.watchPosition(callback, handleError) </script> </head> <body> <div id="d"> </body> </html>
サンプルHTMLの実行結果
3.0アップデート簡単レビュー
バックアップはとったのですが、iTunesに繋いでアップデートボタンを押すと後はサクサク作業が進み完了しました。
元にあったデータやアプリは消えずにそのまま使えるようです。
いろいろな機能が追加されたのですが、コピペができるようになったのはかなりうれしいですね。使い方も非常にシンプルで使い易くてタッチパネルを生かした仕様になっています。
GPS機能にしても取得できるパラメータが多いのがいいですね。多分iPhone 3GSでないと取得できないのがあるとは思いますが、JavaScriptが使える分、高機能なWebアプリとか作れそうですね。
参考サイト
Geolocation API Specification
iPhone’s Safari Browser to include Geolocation – Computerworld Blogs