DistanceBetween () возвращает неточный результат?

Я использую метод distanceBetween() класса Location для вычисления расстояния между двумя точками следующим образом:

 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; } 

Документация гласит, что distanceBetween () «Вычисляет приблизительное расстояние в метрах между двумя точками и, возможно, начальные и конечные подшипники кратчайшего пути между ними». Однако разница между результатом, возвращаемым distanceBetween () и реальным GPS-устройством или Google Navigation, довольно велика. Например, мой метод вернет 6,2 мили, а карты Google показывают 10 миль для того же места. Я дважды проверяю координаты начальной точки p1 и конечной точки p2, и они кажутся правильными. Это то, как работает метод distanceBetween (), или я делаю что-то неправильно? И, кстати, есть ли способ использовать Google Place API для получения расстояния в качестве ответа JSON?

Расстояние, рассчитанное с помощью Google Maps: 9,9 км

Введите описание изображения здесь

И результат

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

4.947700

Solutions Collecting From Web of "DistanceBetween () возвращает неточный результат?"

Google Navigation обычно сообщает о движении или расстоянии пешком по набору шагов в списке маршрутов, а не прямолинейному расстоянию, что и сообщает distanceBetween() .

Чтобы получить дистанцию ​​от Google Maps, я использовал Google Directions API и парсер JSON для получения значения расстояния:

 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; }