【发布时间】:2018-04-18 15:21:45
【问题描述】:
我创建了用于访问 Google 地图 API 的函数。我正在尝试找出从不同点到目标位置需要多长时间。
getDuration <- function(from,to,tMode,key){
from <- iconv(from, to="UTF-8")
to <- iconv(to, to="UTF-8")
tMode <- iconv(tMode, to="UTF-8")
from <- URLencode(from)
to <- URLencode(to)
tMode <- URLencode(tMode)
strQuery <- paste0(
"https://maps.googleapis.com/maps/api/directions/json?",
paste0("origin=",from),
paste0("&","destination=",to),
paste0("&","mode=",tMode),
paste0("&key=",key)
)
print(strQuery)
jDist <- fromJSON(strQuery,simplifyDataFrame = T)
if (jDist$status != "OK"){
print(paste0("Bad status: ",jDist$status))
return(NA)
}
if (length(jDist$routes)==0){
print("no route")
return(NA)
}
if (length(jDist$routes$legs)==0){
print("no legs")
return(NA)
}
return(jDist$routes$legs[[1]]$duration$value)
}
然后我尝试将此函数应用于“来自”的字符向量:
from
[1] “Étampes” “Étréchy” “Dourdan” “La Ferté-Alais” “Méréville” “Saint-Chéron”
sapply(from,function(x) { getDuration(x,to,"driving",key) })
我得到的输出如下:
Étampes Étréchy Dourdan La Ferté-Alais Méréville Saint-Chéron
NA NA 3501 4280 NA NA
这很奇怪,因为 Étampes 和我的目标目的地之间的路线存在并且它不是空的: https://maps.googleapis.com/maps/api/directions/json?origin=%C3%83%E2%80%B0tampes&destination=Cours%20Valmy,%20Nanterre&mode=driving&key=AIzaSyBrmNaCXH_ppK7F0uW4SXZhPIBoDLQdKFE
有人知道如何找出问题的根源吗?
【问题讨论】:
-
如果您尝试使用以
E而不是É开头的地方,它似乎可以工作。这可能是编码问题或只是 Google API 的一个怪癖。您可以使用iconv(...,to="ASCII//TRANSLIT")删除字符中的所有重音符号。 -
Étampes 的 URL 编码似乎不正确。此 URL 使用“%C3%89tampes”返回结果:maps.googleapis.com/maps/api/directions/…
标签: r google-maps-api-3 map-directions