haversine

Назначение

Функция haversine рассчитывает расстояние между двумя GPS координатами с помощью формулы гаверсинуса.

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

Пусть центральный угол \(\theta\) между двумя точками на сферической поверхности равен:

\[\theta=\frac{d}{r}\]

где:

  • \(d\) - расстояние между двумя точками дуги большого круга сферы;

  • \(r\) - радиус сферического тела.

Формула гаверсинуса позволяет рассчитывать гаверсинус \(\theta\) (т.е., \(hav(\theta)\)) из широты (представленной \(\varphi\)) и долготы (представленной \(\lambda\)) двух точек:

\[hav(\theta) = hav (\varphi_{2}-\varphi_{1})+cos(\varphi_{1}) cos(\varphi_{2})hav(\lambda_{2}-\lambda_{1})\]

где

  • \(\varphi_{1}\), \(\varphi_{2}\) - широта точки 1 и широта точки 2;

  • \(\lambda_{1}\), \(\lambda_{1}\) - долгота точки 1 и долгота точки 2.

Итак, функция гаверсинуса \(hav(\theta)\), применяемая выше к центральному углу \(\theta\) и разницам в широте и долготе, равна

\[hav(\theta) = sin^{}(\frac{0}{2})=\frac{1-cos(\theta )}{2}\]

Функция гаверсинуса рассчитывает половину версинуса угла \(\theta\).

Для расчета расстояния \(d\) используйте функцию аркгаверсинуса (обратного гаверсинуса) к \(h = hav(\theta)\) либо функцию арксинуса (обратного синуса):

\[d=r\text{archav}(h)=2r\text{arcsin}(\sqrt{h})\]
Синтаксис

haversine(широта1,долгота1,широта2,долгота2[,radius])

Аргументы

Функция требует наличия четырех аргументов, выражающих значения широты и долготы. Все эти аргументы отображают значения в градусах в диапазоне от -90 до 90:

  1. широта точки 1;

  2. долгота точки 1;

  3. широта точки 2;

  4. долгота точки 2.

Функция также может принимать необязательный аргумент radius, означающий радиус сферического тела в любых единицах измерения. По умолчанию данный аргумент равен 6371 - радиус Земли в километрах.

Возвращаемое значение

Функция возвращает числовое значение - результат формулы гаверсинуса.

Примеры

Расчет расстояния между Нью-Йорком и Лондоном в различных единицах измерения:

  • haversine(40.7128, 74.0060, 51.5072, 0.1276) возвращает 5570.24 (расстояние в километрах)

  • haversine(40.7128, 74.0060, 51.5072, 0.1276, radius:=3956) возвращает 3458.77 (расстояние в милях);

  • haversine(40.7128, 74.0060, 51.5072, 0.1276, radius:=86094) возвращает 75273.02 (расстояние в самолетах Boeing 777).

Расчет расстояния между между полюсами Луны в километрах:

  • haversine(90, 0, -90, 0, radius:=1737.4) возвращает 5458.2