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