使用自定义函数在 R 中使用 Haversine 公式查找两个城市之间的距离
Find distance between two cities using Haversine Formula in R with custom function
我正在尝试使用 R 找到两点之间的距离。虽然我已经看到其他答案 (), I want to use a specific formula to calculate distance in miles. On another site (https://andrew.hedges.name/experiments/haversine/),但我在 Java 中找到了这段代码,它给出了正确的距离他们的图形用户界面:
dlon = lon2 - lon1
dlat = lat2 - lat1
a = (sin(dlat/2))^2 + cos(lat1) * cos(lat2) * (sin(dlon/2))^2
c = 2 * atan2( sqrt(a), sqrt(1-a) )
d = 3961 * c
然后我将其转换为 R 中的函数:
geo_distance <- function(lon2, lon1, lat2, lat1){
dlon <- lon2 - lon1
dlat <- lat2 - lat1
a <- (sin(dlat/2))^2 + cos(lat1) * cos(lat2) * (sin(dlon/2))^2
c <- 2 * atan2(sqrt(a), sqrt(1-a))
d <- 3961 * c
d
}
#The wrong number of miles from Hong Kong to Grand Canyon
geo_distance(114.17, -112.11, 22.31, 36.11)
#The wrong number of miles from Hong Kong to the Bangkok
geo_distance(114.17, 100.50, 22.31, 13.75)
但是,它对某些位置给出了错误的答案。例如,中国香港的经纬度是114.17和22.31,美国大峡谷是-112.11和36.11,最后泰国曼谷是100.50和13.75。
在网站上,它正确地说香港和曼谷 1075 英里,香港和大峡谷 7399 几英里以外。相比之下,我的代码说香港距离曼谷 8078 英里,距离大峡谷仅 4886 英里!
我的代码有什么问题?
您需要将度数转换为弧度。
香港到大峡谷的距离
geo_distance(114.17*pi/180, -112.11*pi/180, 22.31*pi/180, 36.11*pi/180)
#[1] 7399.113
还要检查 geosphere 包和函数 distHaversine
HongKong <- c(114.17, 22.31)
GrandCanyon <- c(-112.11, 36.11)
distHaversine(HongKong, GrandCanyon, r=6378137)
#[1] 11914303 distance in metres
distHaversine(HongKong, GrandCanyon, r=3961)
#[1] 7399.113 distance in miles
我正在尝试使用 R 找到两点之间的距离。虽然我已经看到其他答案 (
dlon = lon2 - lon1
dlat = lat2 - lat1
a = (sin(dlat/2))^2 + cos(lat1) * cos(lat2) * (sin(dlon/2))^2
c = 2 * atan2( sqrt(a), sqrt(1-a) )
d = 3961 * c
然后我将其转换为 R 中的函数:
geo_distance <- function(lon2, lon1, lat2, lat1){
dlon <- lon2 - lon1
dlat <- lat2 - lat1
a <- (sin(dlat/2))^2 + cos(lat1) * cos(lat2) * (sin(dlon/2))^2
c <- 2 * atan2(sqrt(a), sqrt(1-a))
d <- 3961 * c
d
}
#The wrong number of miles from Hong Kong to Grand Canyon
geo_distance(114.17, -112.11, 22.31, 36.11)
#The wrong number of miles from Hong Kong to the Bangkok
geo_distance(114.17, 100.50, 22.31, 13.75)
但是,它对某些位置给出了错误的答案。例如,中国香港的经纬度是114.17和22.31,美国大峡谷是-112.11和36.11,最后泰国曼谷是100.50和13.75。
在网站上,它正确地说香港和曼谷 1075 英里,香港和大峡谷 7399 几英里以外。相比之下,我的代码说香港距离曼谷 8078 英里,距离大峡谷仅 4886 英里!
我的代码有什么问题?
您需要将度数转换为弧度。
香港到大峡谷的距离
geo_distance(114.17*pi/180, -112.11*pi/180, 22.31*pi/180, 36.11*pi/180)
#[1] 7399.113
还要检查 geosphere 包和函数 distHaversine
HongKong <- c(114.17, 22.31)
GrandCanyon <- c(-112.11, 36.11)
distHaversine(HongKong, GrandCanyon, r=6378137)
#[1] 11914303 distance in metres
distHaversine(HongKong, GrandCanyon, r=3961)
#[1] 7399.113 distance in miles