Как вычислить правильно расстояние по координатам?
Нахожу координаты городов. С этим вопросов нет. Получил координаты одного и другого города. Найти расстояние необходимо теперь. Нашел в разные способы, почему то погрешность в этих вычислениях выходит от 15 до 200 км в сравнении с гуглом. Вот последний код:
public static double distFrom(double lat1, double lng1, double lat2, double lng2) {
double earthRadius = 6371000; //meters
double dLat = Math.toRadians(lat2-lat1);
double dLng = Math.toRadians(lng2-lng1);
double a = Math.sin(dLat/2) * Math.sin(dLat/2) +
Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) *
Math.sin(dLng/2) * Math.sin(dLng/2);
double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
double dist = (float) (earthRadius * c);
double dist2 = (float) (earthRadius * c)/1000;
String my_distance = String.valueOf(dist2).substring(0,3);
tvAdress2.setText("~ " + my_distance +" км");
return dist;
}
Ответы (1 шт):
Автор решения: avoloshinn
→ Ссылка
Вы можете использовать класс Location.
Location.distanceBetween(oldPosition.latitude, oldPosition.longitude,
newPosition.latitude, newPosition.longitude, results);
Для более точного результата можно попробовать утилиту от Google. У этого решения есть свои недостатки поэтому решайте в зависимости от ваших требований.
SphericalUtil.computeDistanceBetween(latLngFrom, latLngTo)
Для нее необходимо добавить зависимость
implementation 'com.google.maps.android:android-maps-utils:2.2.3'