2012-11-28 14 views
6

私のコードは以下の通りですので、私がやっていることと私が結果を得るために得ていることについて説明します。navigator.geolocation.watchPositionはうまく動作しません

navigator.geolocation.watchPositionを使用してユーザーの場所を取得しようとしています。私は成功とエラーの両方のコールバックを指定しました。私が場所を得るのは初めてですが、それは通常非常に不正確なので、私はwatchPositionを使用して場所を取得してから4回試してみるか、または500m以内の正確な場所に移動します。私が午前

問題:

  • それは(HTC センセーションとサムスンギャラクシーS3上でテスト)アンドロイドのためのエラーコールバックを入力しないでください。しかし、iPhoneでは、それは の50%以上のエラーコールバックを入力するようです。

  • 決してタイムアウトしません。 の位置情報を受け取るまで検索を続けます。

  • 場所の取得には0〜60秒の間がかかります。ページが読み込まれる前にそれがある場合もあります。時にはそれがなぜ速くなるのか、それ以外の時はどうして得られないのかについての認識可能なパターンもありません。

私は多くのフォーラム投稿と多くのstackoverflow質問とそこにあるジオロケーションと他のドキュメントの仕様を検索しました。これらの問題だけでなく、それに関する情報はあまりありません。私が間違っていることはありますか?それとも、これは場所との仕事の本質ですか?

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; 
      } 
     } 
    } 

答えて

2

私が使用してチェックすることをお勧めします:

if (typeof navigator.geolocation === 'object' && typeof navigator.geolocation.watchPosition === 'function') { 
    ... 
} 

は「Geolocation.watchPosition()メソッドは、その都度、デバイスの変更の位置に自動的に呼び出されるハンドラ関数を登録するために使用されるオプションでエラー処理コールバック関数を指定することもできます。 "

位置がまだ同じであるため、マビは起動しません。間隔またはWebworkerとGeolocation.getCurrentPosition()を使用して、それをデバッグする^^

試してみてください。https://developer.mozilla.org/en-US/docs/Web/API/Geolocation

幸運

関連する問題