- navigator.geolocation.getCurrentPosition を使うと精度が低くても successCallback が呼ばれる
- じゃあ navigator.geolocation.watchPosition を使えばええやん
- でもそれだと一定以上の精度にならないときは止まってしまう
- 一定以上の精度にならないならタイムアウトを設けてできるだけいい精度で取得するようにしよう
ということが簡単にできます。
getAccuratePosition(
function(position){
alert('成功');
},
function(error){
alert('失敗:' + error.message + '(' + error.code + ')');
},
{limit:200, timeout:4000}
);
動作としては「精度がlimitより良くなるまで取得し続けるけれど、timeout以上かかるようならやめてそれなりの精度の位置情報を取得する」です。 navigator.geolocation.getCurrentPosition とやってるところを getAccuratePosition に変えるだけで大丈夫そうです。
使えるオプションは、
- limit: 許される誤差(m)。省略時は100。
- timeout: 待てる時間(ms)。省略時は無限。
のみです。