2012-01-03 4 views
8

Googleマップを使用してウェブアプリケーションを作成しており、getCurrentPosition()を使用してユーザーの地位を取得しています。それは正常に動作しますが、私は時間の経過とともにユーザーの位置を追跡する必要があります。geolocation.watchPositionはgeolocation.getCurrentPositionを破ります

これは私がwatchPosition()を使用することを意図していました。 APIリファレンスAPI referenceによれば、すぐにデータ取得を実行してコールバックを実行する必要がありますが、そうではありません。代わりにそれがフリーズし、私はもはやgetCurrentPosition()を使用することができません。私はこれの原因を捜し求めてきたので、なぜそのように行動しているのか理解できません。私は最新のChrome for Linux Mint "Lisa"を使用しています。

答えて

14

モバイルデバイスでは、.getCurrentPosition()は非常に不正確です。 .watchPosition()を使用する方がより正確ですが、最高の読みを得るには約5秒かかります。その後、バッテリーを無駄にしてアクティブに保ちます。

これは、.watchPosition()を使用して15秒ごとに位置を確認し、.clearWatch()を使用して5秒後に確認を停止します。

デモ:https://jsfiddle.net/ThinkingStiff/phabq6r3/

スクリプト:

var latitude, longitude, accuracy; 

function setGeolocation() { 
    var geolocation = window.navigator.geolocation.watchPosition( 
     function (position) { 
      latitude = position.coords.latitude; 
      longitude = position.coords.longitude; 
      accuracy = position.coords.accuracy; 
      document.getElementById('result').innerHTML += 
        'lat: ' + latitude + ', ' 
       + 'lng: ' + longitude + ', ' 
       + 'accuracy: ' + accuracy + '<br />'; 
     }, 
     function() { /*error*/ }, { 
      maximumAge: 250, 
      enableHighAccuracy: true 
     } 
    ); 

    window.setTimeout(function() { 
      window.navigator.geolocation.clearWatch(geolocation) 
     }, 
     5000 //stop checking after 5 seconds 
    ); 
}; 

setGeolocation(); 

window.setInterval(function() { 
     setGeolocation(); 
    }, 
    15000 //check every 15 seconds 
); 

HTML:

<div id="result"></div> 
+0

私はそれに感謝の男 –

+5

をしようとします。このスクリプトは完全に不合理です。スクリプトがロードされるとwatchPositionが呼び出され、何もない理由で15秒後に2回目が呼び出されます。もちろん、setTimeoutは15秒ごとにsetGeolocationを呼び出すのではなく、そうする必要はありません。 watchPositionに与えられた最初の関数は、ユーザーの位置が実際に変更された場合にコールバックを取得します。 5秒後にclearWatchを呼び出すのも無意味です。 – user414873

+1

@ user414873 'getPosition()'自体は、モバイルデバイス上で非常に不正確です。 15秒ごとに呼び出すと、結果は不正確になります。 'watchPosition()'は約3回の試行(約5秒)まで正確になります。その後、バッテリーを無駄にするだけです。 'clearWatch()'はあなたが再び追跡する準備が整うまでオフにします。これは、モバイルデバイスでのトラッキングに最適な方法です。 – ThinkingStiff

関連する問題