2012-01-03 15 views
8

Google Haritalar ile bir web uygulamasında çalışıyorum ve kullanıcı konumunu almak için getCurrentPosition()'u kullanıyorum. Bu iyi çalışıyor ama zaman içinde kullanıcı pozisyonunu izlemem gerekiyor.geolocation.watchPosition breakers geolocation.getCurrentPosition

Bunun için watchPosition()'u kullanmayı planlıyorum. API referansı API reference'a göre, veri alımını anında yürütmeli ve geri çağırma işlemini yürütmeli, ancak yapmaz. Bunun yerine donuyor ve artık getCurrentPosition() kullanamıyorum. Bunun için bir neden arıyordum ve neden böyle davrandığını anlayamıyorum. En son Linux için Linux Mint "Lisa" kullanıyorum.

cevap

14

Mobil aygıtta .getCurrentPosition() çok yanlış. .watchPosition() kullanmak daha doğrudur, ancak en iyi okumayı almak yaklaşık beş saniye sürer. Bundan sonra, onu aktif tutmak için pil harcar.

Bu, her 15 saniyede bir .watchPosition() kullanarak konumu denetler ve .clearWatch()'u kullanarak beş saniye sonra denetimi durdurur.

Demo: https://jsfiddle.net/ThinkingStiff/phabq6r3/

Senaryo:

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

i it thanks ahbap –

+5

çalışacağız Bu komut dosyası tamamen saçma. betiği yüklendiğinde watchPosition ve 15 saniye sonra ikinci kez bir neden yok. Elbette setTimeout, her 15 saniyede bir setGeolocation çağırmaz ve yapmanız gerekmez. İzleme konumu için verilen ilk işlev, kullanıcının konumu gerçekten değiştiğinde geri arama alır. Ayrıca 5 saniye sonra clearWatch çağırmak anlamsız. – user414873

+1

@ user414873 'getPosition()' kendi başına bir mobil cihazda çok yanlıştır. Her 15 saniyede bir ararsanız, aldığınız her sonuç yanlış olur. watchPosition() ', yaklaşık üç denemeye kadar (yaklaşık 5 saniye) daha doğru olur. Bundan sonra sadece bataryayı boşa harcıyor. clearWatch(), tekrar izlemeye hazır olana kadar kapatır. Bu, bir mobil cihazda izleme için en iyi yöntemdir. – ThinkingStiff