2

不知道为什么我不断收到此错误:

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

https://maps.googleapis.com/maps/api/geocode/json?&address=#211.+226+park+street,+brockville,+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 个观察数据集时它不起作用。

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

4

1 回答 1

2

您需要检查地址中是否包含任何非法或保留字符,因为任何地理编码功能都将使用您的文本来创建 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"

第一个地址有错误;它也有一个#特点。保留字符列表在附近,包括这个与语言无关的 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"
于 2018-11-06T23:15:09.100 回答