1

Вот длинная формула для расчета расстояния между двумя точками координат на Земле

= ACOS(COS(RADIANS(90-LAT1)) * COS(RADIANS(90-LAT2)) +SIN(RADIANS(90-LAT1)) * SIN(RADIANS(90-LAT2)) * * COS(RADIANS(Long1-Long2))) * 6371

Так как использовать его в других формулах немного громоздко, я написал для него определенную пользователем функцию.

Функция DistXY(Lat1 как одиночный, Lng1 как одиночный, Lat2 как одиночный, Lng2 как одиночный) как одиночный

DistXY = WorksheetFunction.Экос (Cos (WorksheetFunction.Радианы (90 - Lat1)) * Cos (Функция листа).Радианы (90 - Lat2)) + Sin (Функция листа).Радианы (90 - Lat1)) * Грех (функция листа).Радианы (90 - Lat2)) * Cos (Функция листа).Радианы (Lng1 - Lng2))) * 6371

Конечная функция

Как видите, они точно такие же. Поскольку в VBA нет функций Acos ou Radians, он даже использует метод worksheetFunction.

Почему, когда я применяю формулу тезисов к одной и той же паре координат XY, я получаю разные результаты?

Например:

От ABC 45.4960674, -73.514446 до XYZ 43.5369, -71.8592

DistXY() результаты: 254.313156128

Метод длинных формул: 254.313268914

Следуя комментариям @raystafarian, изменение всех типов на двойные улучшило точность. Но есть еще разница.

Функция DistXY(Lat1 как двойной, Lng1 как двойной, Lat2 как двойной, Lng2 как двойной) Как двойной ...

Новые результаты:

DistXY() : 254,316868913 5060 км

Длинная формула метода: 254.313268913 5250 км

2 ответа2

2

Вы используете (и возвращаете) тип данных single. Это заставит функции оценивать по-разному, если они принимают другой тип данных по умолчанию.

1

На основании ответа Райстафариана :

Public Function DistXY(Lat1 As Double, Lng1 As Double, Lat2 As Double, Lng2 As Double) As Double
   Dim i As Double, f As Double
   Dim wf As WorksheetFunction
   Set wf = Application.WorksheetFunction

   i = 90
   f = 6371

   DistXY = wf.Acos(Cos(wf.Radians(i - Lat1)) * Cos(wf.Radians(i - Lat2)) + Sin(wf.Radians(i - Lat1)) * Sin(wf.Radians(i - Lat2)) * Cos(wf.Radians(Lng1 - Lng2))) * f
End Function

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .