我尝试使用mapdist()
函数计算纽约市中的邮政编码10027和中国北京之间的距离,但它返回NA
。有没有人知道它是如何工作的?
> mapdist(as.numeric(geocode("10027")),as.numeric(geocode("beijing,china")))
from
1 500 Riverside Dr, New York, NY 10027, USA
to
1 Bei Jing Shi Ren Min Zheng Fu, Dongcheng Qu, Beijing Shi, China
km miles minutes hours
1 NA NA NA NA `
答案 0 :(得分:1)
如果你看一下R的帮助选项,它会为你提供一个很好的例子。
#import ggmap
library(ggmap)
#get set of longitudinal and latitudinal coordinates
(wh <- as.numeric(geocode("the white house, dc")))
(lm <- as.numeric(geocode("lincoln memorial washington dc")))
您还必须设置步行,骑自行车或驾驶的模式。
mapdist(wh, lm, mode = "walking")
正如Alistaire所提到的,对于地理距离,您必须根据地球的球形计算距离。即使地球不是完美的圆形,也有一些相当准确的公式。
以下是我直接从本网站获取的公式:
http://www.r-bloggers.com/great-circle-distance-calculations-in-r/
gcd.hf <- function(long1, lat1, long2, lat2) {
R <- 6371 # Earth mean radius [km]
delta.long <- (long2 - long1)
delta.lat <- (lat2 - lat1)
a <- sin(delta.lat/2)^2 + cos(lat1) * cos(lat2) * sin(delta.long/2)^2
c <- 2 * asin(min(1,sqrt(a)))
d = R * c
return(d) # Distance in km
}
如果您要求提供地理距离,我会阅读链接。