2011-06-07 10 views
5

Mirando la web GeoLocation API documentation hay dos maneras de obtener la ubicación - getCurrentPosition para obtener una lectura rápida de la ubicación y watchPosition para supervisar los cambios en la posición.Espere a alcanzar un umbral de precisión con getCurrentPosition

Lo que estoy buscando es una forma de obtener una ubicación que sea bastante precisa, tan rápido como sea posible. Creo que lo ideal sería utilizar un umbral de precisión en la llamada getCurrentPosition, y se llamaría al controlador de éxito cuando se alcanzara el umbral o se excediera el tiempo de espera (con un resultado lo más preciso posible).

Esto no existe ya, ¿verdad? Es de suponer que sería bastante sencillo implementar esto simplemente ajustando el método watchPosition para detener la comprobación después de un tiempo de espera o se alcanza el umbral. Usaré este enfoque (y tengo la intención de publicar el código) si nadie conoce un método integrado para hacerlo ...

Respuesta

3

No incorporada en la función. Descubrí que un tiempo de espera es mejor que una precisión establecida. Muchas veces en un iPhone la precisión no será mejor que alrededor de 100 metros, por lo que continuar buscando mejor es un desperdicio. Usar watchPosition() ha funcionado mejor y parece triangular, por lo que después de tres lecturas rara vez mejora. Solo espero cinco segundos y me detengo.

Demostración: http://jsfiddle.net/ThinkingStiff/3k859/

HTML:

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

Guión:

function setGeolocation() { 

    var geolocation = window.navigator.geolocation.watchPosition(function (position) { 

      document.getElementById('result').innerHTML += 
        'lat: ' + position.coords.latitude + ', ' 
       + 'lng: ' + position.coords.longitude + ', ' 
       + 'accuracy: ' + position.coords.accuracy + '<br />'; 

     }, 
     function() { 
      //error 
     }, 
     { 
      maximumAge: 250, 
      enableHighAccuracy: true 
     } 

    ); 

    window.setTimeout(function() { 

     window.navigator.geolocation.clearWatch(geolocation) 

    }, 5000); 

}; 

setGeolocation(); 
+0

Gracias por mostrar la función. Esto es lo que planeé escribir, pero getCurrentPosition parecía estar bien para mis usos. –

+0

He marcado esto como la respuesta, porque es más o menos lo que quería originalmente, pero no estoy planeando usarlo, ¡así que no tengo ni idea de si funciona! –

2

Basado en mi experiencia desarrollando aplicaciones basadas en geo-ubicación J2ME para Taxi, chip GPS tomar algunas inicializaciones para obtener una lectura precisa de la ubicación. El método preferido es utilizar un método similar a watchPosition(), que mantendrá el chip GPS caliente para proporcionar una lectura precisa de la ubicación.

Creo que su enfoque es sólido en teoría, pero debe probarse en dispositivos reales ya que los chips de GPS variaron en rendimiento en todos los dispositivos.

Espero que esto ayude.

+0

Pregunta: ¿Hay una función que obtiene localización a un cierto nivel de precisión de forma automática (o el tiempo de espera). Respuesta: No. ¿Sumario justo? :) –

Cuestiones relacionadas