不确定为什么我会不断收到此错误:
值[3L]错误: 下载结果时出错。请通过向浏览器输入以下网址来手动检查其是否有效。如果有效,请引用此URL提交错误报告(注意:您的API密钥已删除,因此您需要重新添加该密钥)
#A look at my dataframe called subset:
ID<- c("XM-7393","XM-7138")
Address<- c("175 College St #450, Toronto, ON M5T 1P7" ,"250 College St, Toronto, ON M5T 1R8")
subset<-data.frame(ID,Address)
subset$Address<- as.character(subset$Address)
require(googleway) #using google to get coordinates
gkey<-"INSERT GOOGLE API KEY HERE" #google API Key needed to get lat/lon coordinates
#a lat and lon vector to store the coordinates from the geocode
lat = vector("numeric", length = nrow(subset))
lng = vector("numeric", length = nrow(subset))
#Function for batch geocoding a list of addresses in a dataframe
for (i in 1:nrow(subset)) {
coord = googleway::google_geocode(subset$Address[i], key=gkey)
if (coord$status == "OK") {
coord = googleway::geocode_coordinates(coord)
lat[i] = coord$lat[1] # sometimes returns multiple coordinates
lng[i] = coord$lng[1] # sometimes returns multiple coordinates
} else {
lat[i] = NA
lng[i] = NA
}
}
#adding the lat and lon coordinates to subset dataset
subset$lat = lat
subset$lng = lng
确定上面的代码有效!但是只有在数据集没有太多观察结果的情况下。我正在使用的原始数据集具有1000个观察值,并且我知道我还没有达到API限制。因此,不确定当我有1000个观测数据集时为什么它不起作用。
答案:某些地址字段中有'#'代表单元号。需要将其删除(请参见下面的注释!)
答案 0 :(得分:1)
您要检查地址中是否没有非法或保留字符,因为任何地理编码功能都将使用您的文本来创建用于查询地理编码API的URL。 google_geocode
本身并不能提供非常有用的错误消息,但是通过查看您上面发布的URL,该错误消息表明未包含必需的参数。
在这种情况下,#
在URL中具有特殊含义,因此会出现错误。仅供参考,我的Google API密钥保存为环境变量GOOGLE_KEY
:
library(googleway)
Address <- c("175 College St #450, Toronto, ON M5T 1P7", "250 College St, Toronto, ON M5T 1R8")
set_key(Sys.getenv("GOOGLE_KEY"))
geocode_results <- lapply(Address, google_geocode)
sapply(geocode_results, function(x) x[["status"]])
#> [1] "OVER_QUERY_LIMIT" "OK"
第一个地址有错误;它也有一个#
字符。保留字符列表在including this language-agnostic SO question附近。使用正则表达式模式,我删除了地址中可能包含的所有#
,(
或)
字符,然后再次尝试进行地址解析。
clean_addresses <- gsub(pattern = "[#\\(\\)]", replacement = "", Address)
geocode_cleaned <- lapply(clean_addresses, google_geocode)
sapply(geocode_cleaned, function(x) x[["status"]])
#> [1] "OK" "OK"