2012-01-03 9 views
8

Estoy trabajando en una aplicación web con google maps y usando getCurrentPosition() para obtener la posición de usuario. Eso funciona bien, pero necesito seguir la posición del usuario a lo largo del tiempo.geolocation.watchPosition breaks geolocation.getCurrentPosition

Para esto tenía la intención de usar watchPosition(). Según la referencia de API API reference, debe ejecutar inmediatamente la adquisición de datos y ejecutar la devolución de llamada, pero no es así. En cambio, se congela y ya no puedo usar getCurrentPosition(). He estado buscando una causa para esto y no puedo entender por qué se está comportando de esa manera. Estoy usando la última Chrome para Linux Mint "Lisa".

Respuesta

14

En un dispositivo móvil, .getCurrentPosition() es muy inexacto. Usar .watchPosition() es más preciso, pero toma aproximadamente cinco segundos obtener la mejor lectura. Después de eso, desperdicia batería para mantenerla activa.

Esto comprueba la posición cada 15 segundos con .watchPosition() y deja de verificarse después de cinco segundos con .clearWatch().

Demostración: https://jsfiddle.net/ThinkingStiff/phabq6r3/

Guión:

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

voy a probarlo gracias tio –

+5

Este script es completamente absurdo. Se llama a watchPosition cuando se carga el script, y una segunda vez después de 15 segundos sin ningún motivo. Por supuesto, setTimeout no llama a setGeolocation cada 15 segundos, y no es necesario. La primera función dada para watchPosition obtendrá una devolución de llamada si la posición del usuario realmente cambia. Tampoco tiene sentido llamar a clearWatch después de 5 segundos. – user414873

+1

@ user414873 'getPosition()' por sí mismo es muy impreciso en un dispositivo móvil. Si lo llama cada 15 segundos, cada resultado que obtenga será inexacto. 'watchPosition()' obtiene más precisión hasta aproximadamente tres intentos (alrededor de 5 segundos). Después de eso, solo está desperdiciando la batería. 'clearWatch()' lo desactiva hasta que esté listo para rastrear nuevamente. Este es el mejor método para rastrear en un dispositivo móvil. – ThinkingStiff

Cuestiones relacionadas