使用R googleway进行批量地理编码时出错



不确定为什么我一直收到这个错误:

[3L]值错误:下载结果时出错。请通过将以下URL输入浏览器手动检查其是否有效。如果有效,请提交一份错误报告,引用此URL(注意:您的API密钥已被删除,因此您需要将其添加回(

https://maps.googleapis.com/maps/api/geocode/json?&地址=#211.+226+公园+街道,+布罗克维尔,+on,+k6v2h5&key=

#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个观测数据集时它不起作用。

回答:一些地址字段有"#"表示单元号。这需要删除(见下面的评论!(

您需要检查您的地址中是否没有任何非法或保留字符,因为任何地理编码函数都将使用您的文本创建URL来查询地理编码API。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"

第一个地址有错误;它还具有CCD_ 4字符。保留字符列表随处可见,包括这个与语言无关的SO问题。使用regex模式,我将删除地址中可能存在的任何#()字符,然后重试地理编码。

clean_addresses <- gsub(pattern = "[#\(\)]", replacement = "", Address)
geocode_cleaned <- lapply(clean_addresses, google_geocode)
sapply(geocode_cleaned, function(x) x[["status"]])
#> [1] "OK" "OK"

相关内容

  • 没有找到相关文章

最新更新