使用mapdist()计算北京和纽约之间的距离

时间:2016-03-19 05:45:34

标签: r ggmap

我尝试使用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   `

1 个答案:

答案 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
}

如果您要求提供地理距离,我会阅读链接。