先日紹介した地質と土質の調査用で作成した簡易的なGPSアプリ、前回の記事で記載したとおり、オフラインで使用していると、何回か緯度経度情報を取得すると、移動してから再度取得しようとしても前の場所の緯度経度が返ってくる。
この状態になったら、再度インターネットにつなげる環境に行くまで、緯度経度情報が取得できなくなる問題は解決されない。
原因はなぜなのだろう?と考えてみたところ、今回作ったアプリか端末のGPSの仕様でキャッシュが残ることが原因だろう。
というわけで、GPSのキャッシュについて試行錯誤試してみた。
はじめにアプリ側のGeolocation APIのキャッシュの設定をいじってみた。
Geolocation APIの標準的な書き方は
navigator.geolocation.getCurrentPosition(successFunc, errFunc); function successFunc(pos){ //緯度経度情報が取得できた時の処理 } function errFunc(err){ //緯度経度情報が取得出来なかった時の処理 }
こんな感じで、成功時と失敗時の処理の関数を準備して、getCurrentPostion関数を実行する。
この時、getCurrentPostion関数の第三引数で緯度経度情報取得時のオプションを指定することが出来る。
というわけで、
var opts = { "enableHighAccuracy": true , //精度 "timeout": 15000 , //タイムアウト "maximumAge": 1 , //キャッシュの保持時間(ミリ秒) } ; navigator.geolocation.getCurrentPosition(successFunc, errFunc, opts);
GPSで緯度経度情報を取得した結果をすぐに破棄するようにしたけれども、これでは解決せず。
次にAndroid端末の方のGPSのキャッシュの方を疑ってみる。
Android端末のGPSのキャッシュは専用のアプリで削除するという情報を見かけたので、Google PlayでGPSのキャッシュを操作出来るアプリを探してみたところ、
GPS Statusというアプリに行き着いた。
GPS Status & Toolbox - Google Play のアプリ
このアプリで内蔵GPSのキャッシュをリセットに出来るらしい。
インストールして早速開いてみる。
左上の三本線をタップして、
A-GPSの管理をタップして開く。
この画面が表示されたら、左下のリセットボタンを押す。
これで内蔵GPSのキャッシュがリセットされる。
リセット後にオフラインでテストをしてみて、最初の方は順調に緯度経度情報が取得できたけれども、しばらくしたら前の場所の緯度経度情報を取得してしまうという問題が再発した。
オフラインで再びリセットをしても解決されないので、オンライン上でこのアプリを介して何らかの情報を得ておく必要がありそうだ。
Soil & Geoロガーをオフラインで使う時は、5回ぐらいまで使えるという意識を持っておいた方が良さそうだ。
何か良い手はないかな?