iPhone Mobile SafariでGPSトラッキングをした話
データベースに記録された緯度経度をマッピングした図。
iPhoneでGPS座標値を記録するためにはどうすればいいのか、という話。
最近、自転車を買ったので遊ぶために調査しました。
以下、iPhone4S, iOS6環境での話です。
1. Geolocation API
ネイティブの開発環境を持っていないのでブラウザでなんとかできないかなーと調べてみると、、
なんと、HTML5にはGPS座標を取得するAPIがあり、Mobile Safariはこの仕様を実装していることがわかりました。
このAPIで、
- 緯度・経度
- 緯度・経度の誤差
- 高度
- 高度の誤差
- 速度
- 端末の向いている方向
を取得できます。ブラウザからセンサの値を取れるってすごいですね。
これなら緯度・経度・高度を記録してやりたい事ができそうです。(iPhoneの開発環境があればネイティブでやるけど金がないので・・・)。
ネイティブアプリでしかできないって事があればその時に考える感じで。
2. APIをいじる
コードとしては、APIに座標を引数にとるコールバック関数を渡してその中で色々やる感じになります。
APIは2つのタイプが提供されています。
- 座標値を一回取得して終わりのタイプ
- 座標値を継続監視して取得し続けるタイプ
方法1. GetCurrentPositionを使う
1回とって終わりのタイプです。
継続的に取得するにはsetTimeoutとかsetIntervalで一定時間ごとに取得する必要があります
例: http://jsdo.it/brainfs/jWzX
方法2. WatchPositionを使う
座標値を継続的に監視して取得し続けるタイプです。こちらのほうが精度が高いです、なぜか。
座標値を時系列で補正してるんでしょうか。今回はこちらを使いました。
例: http://jsdo.it/brainfs/fESL
3. トラッキングにあたって注意
iOSが以下の状態だとMobile SafariはGPSから値を取得しません。
- 自動ロックをOFF ([設定]→[一般]→[自動ロック]の画面で"しない"を選択)
- Mobile Safariをフォアグラウンド実行して当該ページを開いた状態
- Mobile Safariで位置情報サービスをオン([設定]→[プライバシー]→[位置情報サービス] でSafariをオン)
にする必要があります。バッテリー食いそう。この状態でどれぐらい保つものか・・・
ネイティブアプリだとロック中でもGPS座標を取れたりするんでしょうか。
5. バッテリーの持ち
フル充電したiPhoneを
・輝度最低
・自動ロックOFF
・Safari以外のアプリを終了
した状態でGPS座標を取得し続けたところ、だいたい2時間でバッテリーが切れました。
モバイルブースター1台で2回フル充電できるとして、合わせて6時間。一日中外出するとして8〜10時間持たせるには2台必要そうです。
SANYO USB出力付きリチウムイオンバッテリー (専用高容量リチウムイオン電池使用) KBC-L2BS
- 出版社/メーカー: 三洋電機
- 発売日: 2010/10/21
- メディア: エレクトロニクス
- 購入: 67人 クリック: 692回
- この商品を含むブログ (103件) を見る
輝度を上げたりtwitterクライアントなどを立ち上げればもっと早く消費するし3台必要かなぁ。