2012-01-29 14 views
11

Tengo un problema con la función de geolocalización de HTML5. Uso el código a continuación para obtener datos de ubicación. Utilizo la opción "enableHighAccuracy: false" para trabajar con la función de GPS basada en células. La precisión es baja pero la respuesta es muy rápida. Pero algunas personas siempre usan GPS incorporado con su teléfono móvil, por lo que este código no funciona para ellos. Bu, si cambio la opción de accurency como "enableHalAccuracy: true", funciona para ellos. Pero esta vez, el código usa solo GPS incorporado. no basado en CELL GPS.Geolocalización HTML5 enableHighAccuracy ¿Verdadero, falso o mejor opción?

La pregunta -> ¿Cómo puedo hacer eso? Primero, trate de obtener la posición del GPS incorporado con tiempo de espera (por ej. 5000ms) si la posición no puede obtenerse en este momento, simplemente busque la posición basada en la celda para el tiempo de espera (por ejemplo, 10000ms) si la posición no se puede obtener en este momento, devuelve un mensaje de error.

Aquí está el código que uso ahora.

Gracias de antemano.

function getLocationfromGoogle() { 
    navigator.geolocation.getCurrentPosition(
     function(pos) { 
     $("#lat_field").val(pos.coords.latitude); 
     $("#long_field").val(pos.coords.longitude); 
     var geocoder = new google.maps.Geocoder(); 
     var latLng = new google.maps.LatLng(pos.coords.latitude,pos.coords.longitude); 
       geocoder.geocode({ 'latLng': latLng}, function (results, status) { 
       if (status == google.maps.GeocoderStatus.OK) { 
       //console.log(results[0].formatted_address); 
       $("#adresim").val(results[0].formatted_address); 
       } 
       else { 
      alert('Google convertion is not succesfully done.'); 

      } 
      }); 
     },function error(msg){ 

       alert('Please enable your GPS position future.'); 

     },{maximumAge:600000, timeout:5000, enableHighAccuracy: false} 

    ); 
    } 

Respuesta

21

También debe tener en cuenta que la aplicación de este sistema operativo varía de teléfono a teléfono OS - lo que funciona en Android puede o no puede trabajar en iOS, BlackBerry, Windows Phone, etc.

Eres casi allí, sólo tiene que:

  1. Especificar enableHighAccuracy: true (lo tienes configurado en false)
  2. manejar el caso de error de tiempo de espera en el controlador de errores. Si el error de la consulta de alta precisión es tiempo de espera, inténtelo de nuevo con enableHighAccuracy: false.

Tener un vistazo a este código de ejemplo: http://jsfiddle.net/CvSW4/

También debe tener en cuenta que cuando se prueba esto en unos pocos dispositivos, devuelve la ubicación derivado de Wi-Fi, incluso cuando enableHighAccuracy: true.

+0

Hola Kevin.Gracias por tu respuesta. Sí, lo he probado con mi Android 2.3, funciona. También en Firefox y Chrome. funciona. –

+0

He probado para Android 4.1 en FF y Chrome y no funcionó en ninguno de ellos – Andrade

+2

http://jsfiddle.net/CvSW4/761/ objeto de posición reemplazado con objeto de error en el manejo de errores – Devz

6

El código mencionado aquí: http://jsfiddle.net/CvSW4/ no funcionó para mí durante el manejo de errores.

La razón es que las funciones de error aceptan un parámetro llamado 'posición' pero usan un objeto en las funciones llamadas 'error'.

function errorCallback_highAccuracy(position) { ... } 
function errorCallback_lowAccuracy(position) { ... } 

La solución para solucionar este problema fue la de cambiar los métodos de error para aceptar el valor de entrada como un parámetro denominado 'error' y no 'posición', ya que las devoluciones de llamada de error no aceptan una posición y lanzar un objeto error en lugar.

function errorCallback_highAccuracy(error) { ... } 
function errorCallback_lowAccuracy(error) { ... } 

lo menciono aquí, porque no puede publicar en la página de ejemplo resultante y también, este es el lugar en el que he vinculado a través de encontrar el código de ejemplo mencionado anteriormente.

Cuestiones relacionadas