在ggmap中的多个地址上使用路由功能

时间:2014-10-31 17:15:30

标签: r ggmap

我想使用ggmap中的route函数计算多个地址之间的路由。我想出了两个替代解决方案,但两个都没有工作:

*替代1

首先我做了2个向量:一个有兴趣点(总共4个),另一个有基址。

points_of_interest <- c(
"berlin",
"paris",
"new york",
"madrid")

base_address <- "helsinki"

以下内容应计算每对points_of_interest和base_address之间的确切路线。共有4条路线:柏林 - 赫尔辛基,巴黎 - 赫尔辛基,纽约 - 赫尔辛基和马德里 - 赫尔辛基。

calculatedroutes1 <- route(from = base_address,
                          to = points_of_interest)

问题是我只获得柏林 - 赫尔辛基的路线,虽然我认为它应该被矢量化。

*替代2

由于route似乎没有矢量化,我想也许我可以使用plyr。所以这是我的替代代码:

 df.routes <- data.frame(points_of_interest,
                         rep(base_address, each = length(points_of_interest),
                         stringsAsFactors = FALSE)

 df. calculatedroutes2 <- ddply(.data = df.routes,
                           .variables = .(points_of_interest, base_address),
                           .fun = route,
                           points_of_interest,
                           base_address) 

对于points_of_interest和base_address的每个组合(所以对于所有4条路线)我想使用带有参数routefrom = points_of_interest的函数to = base_address。这会生成错误Error: unexpected ',' in "points_of_interest,,但我认为这是在ddply中为函数添加参数的正确方法吗?

与我的other error route function类似的另一个问题仍然没有答案。

2 个答案:

答案 0 :(得分:2)

查看route(...)的代码(只在命令行输入“route”,不是?()),此函数向量化,虽然文档表明它是。

route(...)使用Google Directions API,它采用单一来源和单个目的地。如果您在to=...参数中传递了一个向量,route(...)会创建一个网址向量,但只使用第一个。

解决此问题的一种方法是使用R:

中的Vectorize(...)函数
rt <- Vectorize(route,vectorize.args=c("from","to"),SIMPLIFY=FALSE)
rt(base_address,points_of_interest)

对于points_of_interest的定义,这也会失败,因为Google Directions支持三种交通方式:驾驶,自行车和步行,而这些都不会让您从赫尔辛基到纽约。如果您从兴趣点中删除new york,则会获得包含从赫尔辛基到其他每个城市的路线的数据框列表。

答案 1 :(得分:1)

这会在“points_of_interest”中生成错误Error:unexpected','但我认为这是在ddply中为函数添加参数的正确方法吗?

我猜你应该把这些参数放在引号之间:

df. calculatedroutes2 <- ddply(.data = df.routes,
                       .variables = .(points_of_interest, base_address),
                       .fun = route,
                       "points_of_interest",
                       "base_address")