gpt4 book ai didi

r - 无法使用Haversine公式正确使用R中的纬度和经度计算距离

转载 作者:行者123 更新时间:2023-12-04 10:24:37 25 4
gpt4 key购买 nike

geolocation = function(long1, lat1, long2, lat2){
R = 6371 #Mean radius of the earth in km
diff.long = (long2-long1)
diff.lat = (lat2-lat1)
print(diff.lat)
a =(sin(diff.lat/2) * sin(diff.lat/2) + cos(lat1) * cos(lat2) * sin(diff.long/2)* sin(diff.long/2))
c= 2*atan2(sqrt(a),sqrt(1-a))
d = R*c
print(d)

return(d) #Distance in km

}


当我使用如下传递的值运行它时,它返回 60.0719 而值为 1.030764

x= 地理位置(-73.84431, 40.72132, -73.84161, 40.71228)
打印(x)

我是 R 的新手,所以如果我在代码中犯了任何愚蠢的错误,请原谅

最佳答案

对于此公式,您需要将度数转换为弧度。

创建一个附加函数:

deg2rad <- function(deg) return(deg*pi/180)

并在您的 geolocation 中使用此转换功能:
geolocation = function(long1, lat1, long2, lat2){

# Convert degrees to radians
long1 <- deg2rad(long1)
lat1 <- deg2rad(lat1)
long2 <- deg2rad(long2)
lat2 <- deg2rad(lat2)

R = 6371 #Mean radius of the earth in km

diff.long = (long2-long1)
diff.lat = (lat2-lat1)

a =(sin(diff.lat/2) * sin(diff.lat/2) + cos(lat1) * cos(lat2) * sin(diff.long/2)* sin(diff.long/2))
c= 2*atan2(sqrt(a),sqrt(1-a))
d = R*c

return(d) #Distance in km
}

你应该得到:
geolocation(-73.84431, 40.72132, -73.84161 , 40.71228)
[1] 1.030637

或者,考虑 geosphere可以进行类似计算的可用函数包。

关于r - 无法使用Haversine公式正确使用R中的纬度和经度计算距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60675437/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com