我正在尝试运行此代码,该代码获取地址列表并通过 Google 的 Geocode API(使用下面的函数 Addr2latlng)运行每个地址以获取纬度/经度,并使用下面的 ProcessAddrList 将每个地址放入数据框中。
问题是 Addr2latlng 适用于一个地址,而 ProcessAddrList 适用于多达 10 个地址,但从 11 个或更多地址中我得到以下错误。对于 10 个地址,这可以正常工作。
要运行下面的代码,需要加载包 RCurl 和 RJSONIO。
Error in geoStruct$results[[1]] : subscript out of bounds
Error in geoStruct$results[[1]] : subscript out of bounds
ProcessAddrList <- function(addrList)
{
resultDF <- data.frame(atext=character(),X=numeric(),Y=numeric(),EID=numeric())
i <- 1
for (addr in addrList)
{
latlng = Addr2latlng(addr)
resultDF <-rbind(resultDF,data.frame(atext=addr,X=latlng[[2]],Y=latlng[[1]],EID=i))
i <- i+1
}
return (resultDF)
}
Addr2latlng <- function(address)
{
url <- MakeGeoURL(address)
apiResult <- getURL(url)
geoStruct <- fromJSON(apiResult, simplify = FALSE)
lat <- NA
lng <- NA
try(lat <- geoStruct$results[[1]]$geometry$location$lat)
try(lng <- geoStruct$results[[1]]$geometry$location$lng)
return(c(lat, lng))
}