我编写了以下函数来计算两个位置之间的行程距离。
# Get Distance
require(RJSONIO)
address1 = "Noida Sector 62"
address2 = "Connaught Place"
url <- "https://maps.googleapis.com/maps/api/distancematrix/json?"
url <- URLencode(paste(url, "origins=", address1,"&", "destinations=", address2, "&sensor=false", "&units=metric", "&mode=driving", sep = ""))
x <- fromJSON(url, simplify = FALSE)
metres = x$rows[[1]]$elements[[1]]$distance$text
我想让上面的程序针对下面向量中提到的所有位置组合运行 -
address = c("Noida Sector 62" , "Saket", "Delhi University, North Campus", "Laxmi Nagar", "Khan Market", "Connaught Place")
答案 0 :(得分:1)
使用combn
创建所有可能的地址组合(此处我们使用m = 2
,因为我们需要两个组合)。然后使用循环迭代对(foo
矩阵)。
require(RJSONIO)
api <- "API_SEQUENCE"
address <- c("Noida Sector 62" , "Saket", "Delhi University, North Campus", "Laxmi Nagar", "Khan Market", "Connaught Place")
foo <- combn(address, 2)
metres <- list()
for(i in 1:ncol(foo)) {
address1 <- foo[1, i]
address2 <- foo[2, i]
url <- "https://maps.googleapis.com/maps/api/distancematrix/json?"
url <- URLencode(paste(url, "origins=", address1,"&", "destinations=", address2, "&sensor=false", "&units=metric", "&mode=driving", sep = ""))
x <- fromJSON(url, simplify = FALSE)
metres[[i]] <- x$rows[[1]]$elements[[1]]$distance$text
}
foo[, 1:5]
[,1] [,2] [,3]
[1,] "Noida Sector 62" "Noida Sector 62" "Noida Sector 62"
[2,] "Saket" "Delhi University, North Campus" "Laxmi Nagar"
[,4] [,5]
[1,] "Noida Sector 62" "Noida Sector 62"
[2,] "Khan Market" "Connaught Place"
答案 1 :(得分:1)
以下是使用expand.grid
获取所有地址组合的解决方案。
distance <- function(a1, a2){
url <- "https://maps.googleapis.com/maps/api/distancematrix/json?"
url <- URLencode(paste(url, "origins=", a1,"&", "destinations=", a2, "&sensor=false", "&units=metric", "&mode=driving", sep = ""))
x <- fromJSON(url, simplify = FALSE)
metres <- x$rows[[1]]$elements[[1]]$distance$text
metres
}
address = c("Noida Sector 62" , "Saket", "Delhi University, North Campus", "Laxmi Nagar", "Khan Market", "Connaught Place")
add <- expand.grid(A1 = address, A2 = address, stringsAsFactors = FALSE)
add <- add[add$A1 != add$A2, ]
row.names(add) <- NULL
d <- apply(add, 1, function(x) distance(x[1], x[2]))
d
#[1] "29.0 km" "24.0 km" "10.7 km" "18.1 km" "18.3 km" "27.3 km" "27.0 km"
# [8] "18.6 km" "11.1 km" "15.8 km" "28.2 km" "28.3 km" "15.3 km" "16.8 km"
#[15] "8.5 km" "11.3 km" "20.2 km" "15.3 km" "8.8 km" "7.4 km" "18.8 km"
#[22] "10.9 km" "17.7 km" "8.3 km" "5.5 km" "19.5 km" "14.0 km" "9.4 km"
#[29] "7.1 km" "4.7 km"