Как вычислить правильно расстояние по координатам?

Нахожу координаты городов. С этим вопросов нет. Получил координаты одного и другого города. Найти расстояние необходимо теперь. Нашел в разные способы, почему то погрешность в этих вычислениях выходит от 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'
→ Ссылка