NtOwl
@NtOwl
Прости за Спагетти-код, просто я верую в пастафари

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

Всем привет, стоит задача вычислить румб по двум координатам
def haversine(lat1, lon1, lat2, lon2):
    # Конвертируем в список
    lon1, lat1, lon2, lat2 = map(radians, (lon1, lat1, lon2, lat2))

    dlon = lon2 - lon1
    dlat = lat2 - lat1
    a = sin(dlat / 2) ** 2 + cos(lat1) * cos(lat2) * sin(dlon / 2) ** 2
    c = 2 * asin(sqrt(a))
    #радиус земли(под вопросом, везде по разному указан)
    km =6371 * c
    km = km*1000
    km = toFixed(km, '2')
    r = (atan((dlat)/(dlon)))
    print ('Расстояние в метрах:', km)
    print ('Румбы(ещё не работает):', r)


С расстоянием всё отлично работает, выводится нормально. А вот что касается румбов, получается не очень...

Вот к примеру 2 точки:
54.5244194444444 61.2879
54.5246944444444 61.2872138888889

Расстояние в метрах: 104.62
Румбы(ещё не работает): 0.27477411336095403
Хотя румб на этих координатах должен быть: ~~56...Выручайте)
  • Вопрос задан
  • 526 просмотров
Пригласить эксперта
Ответы на вопрос 1
@lz961
atan дает ответы в радианах, а вам, наверное, градусы нужны. Хотя все равно не спасет, поскольку для небольших расстояний нужно использовать поправку на длину параллели:
dx = dlon/cos(math.radians(lat))
dy = dlat
azimuth = 90-math.degrees(math.atan2(dy, dx))
для больших расстояний нужны формулы
gis-lab.info/qa/great-circles.html
gis-lab.info/qa/angles-sphere.html
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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