10

さて、私のコードは以下にあるので、私が何をしているのか、何を結果として得ているのかを説明します.

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

1 に答える 1