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

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; } 
  • Android abre InfoWindow en el marcador de clúster
  • PhoneGap y Google Maps API V3 "¿Desactivado?"
  • Cómo agregar la ventana de información para el marcador de clustering en android?
  • Establecer nombre y título en la posición de google map en Android
  • Direcciones de manejo de la web móvil desde la ubicación actual
  • Cómo tamaño de los iconos de marcadores personalizados para Android Google Maps v2?
  • Cajón de navegación y MapFragment
  • Generar LatLng aleatorio dada la ubicación del dispositivo y el radio
  • ¿Cómo hacer que la altura de MapView tenga en cuenta la barra de estado de Android?
  • Avisos legales de Google Maps API v2 Cadena demasiado larga
  • Google Maps v2 que centra y que da vuelta a la posición de la cámara para caber dos marcadores
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.