Формула Haversine дает неверный результат в Netlogo

Я использую расширение Netlogo gis и пытаюсь рассчитать расстояние между агентами в км. С помощью gis:envelope-of я могу получить позиции агента в градусах (!) широты и долготы, поэтому я хочу использовать формулу Хаверсина для расчета расстояний. Проекция моего базового шейп-файла ГИС — WGS 84.

То, что я написал для двух примерных пунктов, следующее:

to haversine

let lata 31.8930795682288
let longa 36.0898369172224
let latb 31.9964498913126
let longb 36.0318329821497


let rad (pi / 180)



let result acos (cos (rad * lata) * cos(rad * (latb )) + sin ( rad * (lata) )* sin(rad * (latb)) * cos(rad * (longa - longb))) * 6371


print result


end 

Это дает расстояние 11,5 км, в то время как та же формула, примененная в Excel (с использованием формулы RADIANS вместо «rad»), дает мне 12,73 км, число, которое этот веб-сайт http://www.movable-type.co.uk/scripts/latlong.html подтверждает.

Любая идея, что я делаю неправильно здесь? Заранее спасибо.


person derheine    schedule 15.06.2017    source источник
comment
Это здесь bluemm.blogspot.de/2007/01/ (и ГИС, а также ссылка, размещенная в исходном вопросе, дают то же самое, что и эта формула Excel)   -  person derheine    schedule 15.06.2017


Ответы (1)


Формула, которая вычисляет result, неверна. Похоже, вы поменяли местами sin и cos. Использовать

let result acos(sin(rad * lata) * sin(rad * latb) + cos(rad * lata) * cos(rad * latb) * cos(rad * (longa - longb))) * 6371

Кроме того, согласно документам, которые я прочитал (например, cos и acos), триггерные функции netlogo используют градусы, поэтому вычисление должно быть

let result rad * acos(sin(lata) * sin(latb) + cos(lata) * cos(latb) * cos(longa - longb)) * 6371
person Warren Weckesser    schedule 15.06.2017
comment
Спасибо, что ответили мне! Это, однако, дает результат 13.18, что тоже верно... путаница! - person derheine; 15.06.2017
comment
У меня нет установленного netlogo, поэтому я не могу его проверить. Перевод на python дает 12,73, как и ожидалось. - person Warren Weckesser; 15.06.2017
comment
Я только что попробовал R, он также дает 12,73 - может ли это быть проблемой, связанной с netlogo? - person derheine; 15.06.2017