2010-07-20 16 views
8

Tengo una vista de mapa donde quiero rastrear la ubicación actual del usuario. El GPS y las 'redes inalámbricas' se activan en la configuración de mi teléfono. Sin embargo, dado que estoy en el interior no obtengo una corrección de GPS, por lo tanto, la ubicación se determina a través de la red; lugar wifi está disponible.Google Maps y aplicaciones con mapview tienen diferentes posiciones actuales

Tengo la aplicación Google Maps ejecutándose y mi aplicación ejecutándose.

Extrañamente, la ubicación actual difiere entre Google Maps y mi aplicación, donde Google Maps es muy preciso, mientras que en mi aplicación la ubicación está de alguna manera a unos 100 metros.

En mi aplicación, básicamente, hacer lo siguiente (con fines de depuración ahora):

1) inicialmente coloque un marcador en el mapa: geopunto recuperará a través de locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);

2) inicialmente colocar otro marcador en el mapa : geopoint recuperado a través de locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);

Esto colocará las últimas ubicaciones conocidas de ambos proveedores en el mapa (finalmente conocido desde fuera de mi aplicación).

3) a continuación de las actualizaciones regulares (ya que no consigo un GPS fijar todos modos cubierta aquí), que hacen:

locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, baseLocationListener); 

Puede ver por la frecuencia y la distancia que paso por el parámetro 0 en ambos casos.

En el manifiesto de la aplicación, se conceden los permisos siguientes:

android.permission.ACCESS_COARSE_LOCATION 
android.permission.ACCESS_FINE_LOCATION 
android.permission.ACCESS_MOCK_LOCATION 

En realidad mi baseLocationListener se consiga llamar, lo que veo en el registro, pero la ubicación actualizada de alguna manera es la misma que la última posición actual conocida (de LocationManager.NETWORK_PROVIDER), mismo lat/lng.

Pensé que tal vez pasé por alto algo o me perdí un parámetro o configuración, o mi código tiene un error. Por lo tanto, instalé algunas otras (3 en total) aplicaciones LBS del mercado de Android que también muestran la ubicación del usuario actual. Las ubicaciones actuales que se muestran en esas aplicaciones son iguales a las de mi aplicación, y todas están a unos 100 metros de distancia, pero al menos son lo mismo.

Ver la captura de pantalla aquí: screenshot http://img33.imageshack.us/img33/8679/mapproblem.png

http://img33.imageshack.us/img33/8679/mapproblem.png

Ahora me pregunto:

1) según entiendo, getLastKnowLocation es y no aplicación en todo, ¿por qué todo el sistema Hay diferencias entre la ubicación en los mapas de Google y todas las demás aplicaciones?

2) ¿Google Maps no actualiza el lastKnownLocation de un proveedor?

3) ¿Google Maps utiliza un proveedor diferente ubicación personalizada (es decir, debido a razones de licencia) que no sea GPS_PROVIDER o NETWORK_PROVIDER como lo son en el SDK?

4) ¿cómo lograr el mismo resultado preciso con el NETWORK_PROVIDER como lo hace Google Maps?

+0

¿Es posible que Google Maps solo esté usando la última ubicación que obtuvo del GPS, ya que a través de la red sabe que no ha llegado muy lejos? En otras palabras, la aplicación Google Maps sabe que entró (ya que el GPS se fue pero la ubicación de la red aún está disponible), y almacena el último punto GPS conocido y lo usa. – Nate

+0

No lo creo. Ejecuté todas las aplicaciones al mismo tiempo, por lo tanto, la posición no debería diferir al mismo tiempo. Hace solo unos minutos también lo probé afuera y también fui en un autobús por una distancia más larga. Los mosaicos de la API de google maps son definitivamente inexactos, vea mi respuesta a continuación, que básicamente lo demuestra. También probé con GPS completamente fuera de uso y solo con GSM/Wifi, todo da como resultado lo mismo. Además, getLastKnowLocation es para todo el sistema, no para toda la aplicación. Si Google Maps lo usa, también debería obtener el mismo puesto en mi aplicación. –

+0

De hecho, probablemente obtenga el mismo latitud/longitud de getLastKnowLocation que Google Maps, pero solo se muestra incorrectamente en diferentes mosaicos de mapas inexactos (consulte la respuesta a continuación como un ejemplo de la API web). –

Respuesta

2

Creo que encontré una respuesta, aunque no una solución. Parece que el problema está en la calidad de los datos de los diferentes proveedores de mapas que se utilizan para Google Maps y MapView en SDK, que difieren.

Las coordenadas de los mosaicos del mapa no parecen ser muy precisas, al igual que en las aplicaciones web públicas de google maps.

Vea esta captura de pantalla para un ejemplo, donde fijé el mismo punto geográfico. screenshot http://img339.imageshack.us/img339/2793/gmaps2.png http://img339.imageshack.us/i/gmaps2.png/

El mapa con el mapa público API es de unos pocos cientos de metros. Parece que solo tenemos que vivir con eso? :(

+0

Actualización: curiosamente, la vista de satélite parece ser bastante precisa, solo la vista de la calle no lo es.Significa que la superposición de satélites con Street View no parece coincidir, probablemente debido a diferentes proveedores de contenido de mapas. Lo mejor es usar siempre la vista satelital, al menos en áreas rurales donde el material del mapa es inexacto. –

0

Las imágenes de mapa y satélite en Google Maps es apagado por un par de metros, pero no creo que debería estar fuera tanto. Esto parece ser un par de cientos de metros.

Dependiendo cómo adquirió su posición dictará cuál es la posición que se obtiene. Por lo que entiendo, estos son los tres niveles de adquisición.

  • GPS
  • Red
  • WIFI

El GPS y la red se determinan por triangulación. El GPS es el más preciso. WIFI se hace usando un "whois", se adquiere una dirección y luego se geocodifica, siendo a veces completamente inexacta.

Algunos dicen que son móviles GPS, pero lo más probable es Pseudo-GPS como el iPhone 1.

+0

Gracias por la explicación, pero en realidad no explica el comportamiento que mencioné anteriormente. 'Google Maps' en sí mismo no es el problema, de hecho, en Google Maps, la ubicación es muy precisa, es solo con MapView dentro de mi aplicación. Por supuesto, la precisión de gps, wifi y gsm difieren (una buena descripción está aquí por cierto: http://forum.sdx-developers.com/android-2-1-development/cdma-lockup-wifi-use-wireless- redes-y-gps!/msg22834/# msg22834), pero debería ser lo mismo para Google Maps y para mi MapView en mi aplicación. Ver mi respuesta a continuación y los comentarios anteriores, esa es la explicación lógica que encontré. –

+0

> "Esto parece ser un par de cientos de metros.": Pero de hecho: unos pocos metros de cadete importan si su aplicación está haciendo navegación peatonal en una ciudad donde las calles están muy cerca. Con cientos de metros de distancia, la navegación completa es inútil. –

2

Sé que su mensaje es de un año de edad, pero la respuesta que pienso es que: datos de los mapas de Google en China está compensada o distorsionada. Noté que estás en el sur de China. El gobierno de China requiere eso por algunas razones de seguridad. Here is the Google search results.

El algoritmo de transformación es desconocido. Probablemente puedas buscarlo en Google y te deseo buena suerte.

+0

Hola Frank, gracias por la pista, no estaba al tanto, pero tiene sentido. –

Cuestiones relacionadas