DistanceBetween () devuelve un resultado incorrecto?

Utilizo distanceBetween() de la clase Location para calcular la distancia entre dos puntos de la siguiente manera:

 private float getDistanceInMiles(GeoPoint p1, GeoPoint p2) { double lat1 = ((double)p1.getLatitudeE6()) / 1e6; double lng1 = ((double)p1.getLongitudeE6()) / 1e6; double lat2 = ((double)p2.getLatitudeE6()) / 1e6; double lng2 = ((double)p2.getLongitudeE6()) / 1e6; float [] dist = new float[1]; Log.i("destination coordinates", "Latitude:" + lat2 + ", Longitude: " + lng2); Location.distanceBetween(lat1, lng1, lat2, lng2, dist); return dist[0] * 0.000621371192f; } 

La documentación dice que distanceBetween () "Calcula la distancia aproximada en metros entre dos ubicaciones, y opcionalmente los cojinetes inicial y final del recorrido más corto entre ellos". Sin embargo, la diferencia entre el resultado devuelto por distanceBetween () y el dispositivo GPS real o la aplicación de navegación de Google es bastante grande. Por ejemplo mi método volverá 6.2 millas mientras que los mapas de google demuestran 10 millas para la misma localización. Reviso dos veces las coordenadas del punto inicial p1 y el punto final p2 y parece que son correctas. ¿Es así como funciona el método distanceBetween () o ¿Estoy haciendo algo mal? Y por cierto ¿Hay una manera de utilizar Google Place API para recuperar una distancia como una respuesta JSON?

Distancia calculada por Google Maps: 6.1 millas

Introduzca aquí la descripción de la imagen

Y el resultado de

 Location.distanceBetween(41.742964, -87.995971, 41.811511, -87.967923, dist) is 

4.947700

2 Solutions collect form web for “DistanceBetween () devuelve un resultado incorrecto?”

Generalmente, Google Navigation indica la distancia de conducción o de marcha a lo largo del conjunto de pasos en la lista de direcciones, no la distancia en línea recta, que es lo que indica la distanceBetween() .

Para obtener una distancia de un Google Maps, he utilizado la API de Google Maps y el analizador JSON para recuperar el valor de la distancia:

 private double getDistanceInfo(double lat1, double lng1, String destinationAddress) { StringBuilder stringBuilder = new StringBuilder(); Double dist = 0.0; try { destinationAddress = destinationAddress.replaceAll(" ","%20"); String url = "http://maps.googleapis.com/maps/api/directions/json?origin=" + lat1 + "," + lng1 + "&destination=" + destinationAddress + "&mode=driving&sensor=false"; HttpPost httppost = new HttpPost(url); HttpClient client = new DefaultHttpClient(); HttpResponse response; stringBuilder = new StringBuilder(); response = client.execute(httppost); HttpEntity entity = response.getEntity(); InputStream stream = entity.getContent(); int b; while ((b = stream.read()) != -1) { stringBuilder.append((char) b); } } catch (ClientProtocolException e) { } catch (IOException e) { } JSONObject jsonObject = new JSONObject(); try { jsonObject = new JSONObject(stringBuilder.toString()); JSONArray array = jsonObject.getJSONArray("routes"); JSONObject routes = array.getJSONObject(0); JSONArray legs = routes.getJSONArray("legs"); JSONObject steps = legs.getJSONObject(0); JSONObject distance = steps.getJSONObject("distance"); Log.i("Distance", distance.toString()); dist = Double.parseDouble(distance.getString("text").replaceAll("[^\\.0123456789]","") ); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } return dist; } 
  • Dibujar una superposición similar a MapsApp
  • Cómo obtener el nombre de la ciudad de las coordenadas de latitud y longitud en Google Maps?
  • Violación de la política de StrictMode: StrictModeDiskReadViolation, WriteViolation en Android
  • Mapa Ver instrucciones de dibujo usando google Directions API - decodificar polilíneas
  • La localización simulada no funciona en el mapa de Google
  • Problemas clave de la cuenta de transferencia de aplicaciones y api
  • Error en la autenticación de Google Maps APIv2
  • Android: cómo volver a cargar marcadores personalizados una vez que la imagen se descarga a través de Picasso?
  • GetMapAsync () en el fragmento
  • ¿Hay alguna manera de mostrar las instrucciones de la ruta en Google Map API v2?
  • Cordova Phonegap y Google Maps v3 javascript api: Cómo agregar funciones backbutton al hacer clic en el enlace de la licencia o el logotipo de Google Maps
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.