Задать вопрос
iamdivine
@iamdivine

Как рассчитать расстояние между двумя точками на земле?

Добрый день,
2 точки у каждой координаты lat, lon
Как посчитать расстояние между ними?
Видел есть .net Framework метод GeoCoordinate, но я делаю на .net core
  • Вопрос задан
  • 1175 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 2
Griboks
@Griboks Куратор тега C#
Есть несколько вариантов, по возрастанию точности и "правильности":
1) Длина отрезка с умножением на размерность 1 градуса в метрах, т.е. например 30 км на 17 градусов → sqrt((1.76Δlat)^2+(1.76Δlon)^2)
2) Как предыдущее, но разные масштабы по lon и lat.
3) Длина дуги на сфере.
4) Длина дуги на эллипсоиде.
5) Длина дуги на определённом эллипсоиде, наиболее точном для местности. Дистанция Карнея (там есть ссылка на готовые библиотеки на разных языках) по эллипсоиду WGS84 даёт неплохую точность 1-2 метра.
6) Вычисление по геоиду или локальной карте. Тут ничего не могу сказать, т. к. это оверхед чуть более чем всегда.
Ответ написан
Комментировать
iamdivine
@iamdivine Автор вопроса
public double GetDistanceFromLatLonInKm(double lat1,
            double lon1,
            double lat2,
            double lon2)
        {
            var R = 6371d;
            var dLat = Deg2Rad(lat2 - lat1);
            var dLon = Deg2Rad(lon2 - lon1);
            var a =
                Math.Sin(dLat / 2d) * Math.Sin(dLat / 2d) +
                Math.Cos(Deg2Rad(lat1)) * Math.Cos(Deg2Rad(lat2)) *
                Math.Sin(dLon / 2d) * Math.Sin(dLon / 2d);
            var c = 2d * Math.Atan2(Math.Sqrt(a), Math.Sqrt(1d - a));
            var d = R * c;
            return d;
        }

        private double Deg2Rad(double deg)
        {
            return deg * (Math.PI / 180d);
        }
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
samodum
@samodum
Какой вопрос - такой и ответ
длина дуги на сфере.
Элементарная школьная стереометрия.
Совсем уже обленились
Ответ написан
@d-stream
Готовые решения - не подаю, но...
На nuget.org болтается одноименный с исходниками внутри - аж два файла.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы