【发布时间】:2018-08-14 13:29:01
【问题描述】:
我正在查询Google Maps Roads API,每个请求最多只能接受 100 个坐标对。但是,我来自routes 的一些输入线串包含超过 100 个段。
我编写了一个示例循环,该循环向 API 发送请求,但仅限于带有 if (nrow(routes$mat) <= 100) {...} 的 100 段以下的行,其中 routes$mat 是坐标对矩阵。
for (i in 1:length(routes)) {
if (nrow(routes$mat) <= 100) {
mat <- paste(apply(mat, 1, paste, collapse=","), collapse="|")
a <- "https://roads.googleapis.com/v1/snapToRoads?path="
b <- mat
c <- "&interpolate=false&key=YOUR_API_KEY"
request <- paste(a,b,c, sep="")
con <- curl(request)
open(con)
out <- readLines(con)
mydf <- fromJSON(out)
close(con)
output <- cbind(mydf$snappedPoints$location$longitude, mydf$snappedPoints$location$latitude)
}
我的目标是将所有行发送到 API - 无论它们的长度如何,但这意味着将它们逐个发送。
如何调整此循环以一次仅发送 100 个 如果 mat 大于 100,然后将结果连接到单个 output 中?
例如,如果nrow(mat) = 250,将有 3 个输出,第一个输出为 100,第二个输出为 100,第三个输出为 50。
【问题讨论】:
标签: r google-maps loops while-loop