Я использую 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: 6,5 миль
И результат
Location.distanceBetween(41.742964, -87.995971, 41.811511, -87.967923, dist) is
4.947700