さて、私のコードは以下にあるので、私が何をしているのか、何を結果として得ているのかを説明します.
navigator.geolocation.watchPosition を使用してユーザーの位置を取得しようとしています。成功とエラーの両方のコールバックを指定しました。通常、最初に位置を取得するときは非常に不正確であるため、watchPosition を使用して、4 回試行するか、500 メートル以内の正確な位置を取得するまで位置を取得し続けます。
私が抱えている問題:
Android のエラー コールバックには決して入りません (HTC Sensation と Samsung Galaxy S3 でテスト済み)。ただし、iPhone では、50% 以上の確率でエラー コールバックに入るようです。
また、タイムアウトすることもありません。場所を受け取るまで検索を続けます。
- 場所を取得するのに 0 ~ 60 秒かかります。ページの読み込みが完了する前に完了することもあれば、1 分以上かかることもあります。また、なぜ高速になるのか、そうでないのかについて、識別可能なパターンもありません。
多くのフォーラム投稿と多くのスタックオーバーフローの質問、およびジオロケーションの仕様とそこにある他のドキュメントを検索しました。これらの問題は言うまでもなく、それに関する情報はあまりありません。私が間違っていることはありますか?それとも、これは場所を扱う作業の性質にすぎませんか?
if(navigator.geolocation){
var geo_count = 0;
var wpid = navigator.geolocation.watchPosition(success, error, {
enableHighAccuracy: true,
maximumAge: 0,
timeout: 10000
});
function success(position){
alert(position.coords.accuracy)
geo_count = geo_count + 1;
if(position.coords.latitude && position.coords.longitude && position.coords.accuracy < 500){
navigator.geolocation.clearWatch(wpid);
alert('position obtained!');
}
else if(geo_count > 4){
navigator.geolocation.clearWatch(wpid);
alert('inaccurate position obtained');
}
}
function error(error){
switch(error.code){
case 1:
alert('permission denied');
break;
case 2:
alert('position unavailable');
break;
case 3:
alert('timeout');
break;
default:
alert('unknown error');
break;
}
}
}