Блог

Формула Гаверсинуса на Python

Формула Haversine

Формула Haversine (на русском — «формула хаверсин») позволяет вычислять расстояние между двумя точками на поверхности Земли с учётом её сферической формы.

Основные моменты

  • Земля приблизительно шарообразная, поэтому обычная геометрия на карте неточна.
  • Формула Haversine вычисляет длину дуги большой окружности — кратчайший путь между двумя точками на сфере.
  • Используются широта (latitude) и долгота (longitude) точек.

Формулы

Пусть есть две точки:

  • Точка 1: (lat1, lon1)
  • Точка 2: (lat2, lon2)
R = 6371  км (радиус Земли)
Δlat = lat2 - lat1
Δlon = lon2 - lon1
a = sin²(Δlat/2) + cos(lat1) * cos(lat2) * sin²(Δlon/2)
c = 2 * arctan2(√a, √(1-a))
d = R * c
    

Здесь:

  • d — расстояние между точками по поверхности Земли в километрах.
  • Это наиболее точное приближение для сферической Земли.

Примечание

Формулы используют радианы для широты и долготы при вычислении тригонометрических функций.

Пример кода на Python

import math


def haversine(lat1, lon1, lat2, lon2):
    R = 6371  # Радиус Земли в километрах
    # Переводим градусы в радианы
    lat1, lon1, lat2, lon2 = map(math.radians, [lat1, lon1, lat2, lon2])

    dlat = lat2 - lat1
    dlon = lon2 - lon1

    a = math.sin(dlat / 2) ** 2 + math.cos(lat1) * math.cos(lat2) * math.sin(dlon / 2) ** 2
    c = 2 * math.atan2(math.sqrt(a), math.sqrt(1 - a))

    distance = R * c
    return distance


# Пример использования:
berlin = (52.52, 13.4)
paris = (48.85, 2.35)

dist = haversine(berlin[0], berlin[1], paris[0], paris[1])
print(f"Расстояние между Берлином и Парижем: {dist:.2f} км")

# Расстояние между Берлином и Парижем: 877.68 км
Читать дальше >>

Список тэгов

    Apps Script      Arrays Java Script      asynchronous code      asyncio      coroutine      Django      Dropdown List      Drop Shipping      Exceptions      GitHub      Google API      Google Apps Script      Google Docs      Google Drive      Google Sheets      Haversine      multiprocessing      Parsing      Python      regex      Scraping      ssh      Test Driven Development (TDD)      threading      website monitoring      zip