我正在使用Netlogo的gis扩展,并且我正在尝试计算代理之间的距离(以km为单位)。
使用gis:envelope-of
我可以获得代理在纬度和纬度(!)中的位置,因此我想使用Haversine公式来计算距离。我的基础GIS形状文件的投影是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确认的数字。
知道我在这里做错了吗?提前谢谢。
答案 0 :(得分:2)
计算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 trig函数使用度数,因此计算应该是
let result rad * acos(sin(lata) * sin(latb) + cos(lata) * cos(latb) * cos(longa - longb)) * 6371