Haversine 公式在 Netlogo 中提供不正确的结果

Haversine formula delivers incorrect result in Netlogo

我正在使用 Netlogo 的 gis 扩展,并试图计算以公里为单位的代理之间的距离。 使用 gis:envelope-of 我可以获得代理的位置(以度数(!)纬度和经度表示),因此我想使用 Haversine 公式来计算距离。我的基础 GIS-shapefile 的投影是 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 中应用的相同公式(使用弧度公式而不是 "rad")给我留下了 12.73 公里,这个数字是这个网站 http://www.movable-type.co.uk/scripts/latlong.html确认。

知道我做错了什么吗?提前致谢。

计算result的公式不正确。看起来你颠倒了 sincos。使用

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

此外,根据我读过的文档(例如 cos and acos),netlogo trig 函数使用度数,因此计算应该是

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