使用 ggmap 包将地理编码转换为文本地址时出错

Error when translating geocode to text address using ggmap package

我想使用 ggmap 的函数添加一个列,其中包含 data.table 中列出的每个商店的文本地址,基于商店的地理编码(经度和纬度):revgeocode.

为此,我有一个包含以下信息的 data.table:

dt
shop_id    LON        LAT
Shop1     -86.82651  21.15774
Shop2     -86.82663  21.17349
Shop3     -86.84672  21.14235

我想使用下面的 for 循环来添加一个列,该列以可读文本显示每家商店的地址:

dt$address <- "TEXT"
i = nrow(dt)
for (i in c(1:nrow(dt))) {
    dt$address[i] <- revgeocode( as.numeric( dt[i,c("LON","LAT"] ),
                                 output = "address", source = "google")
}

不幸的是,循环并没有完全起作用。我收到了某些地理编码的以下警告消息:

1: In revgeocode(as.numeric(sucs[i, c("LONGITUD", "LATITUD")]), output = "address", : reverse geocode failed - bad location? location = "-86.8266333"reverse geocode failed - bad location? location = "21.1734889"

理论上,这些代码都应该有效,因为商店的地理编码是直接从 Google 地球提取的。有没有人知道为什么有些 goecodes return 作为 bad location 警告?

谢谢!

没问题运行你的循环(我更正了语法):

for( i in 1:nrow(dt) ) {
  dt$address[i] <- revgeocode( as.numeric(dt[i, c("LON","LAT")]), output = "address" )
}

> dt
  shop_id       LON      LAT
1   Shop1 -86.82651 21.15774
2   Shop2 -86.82663 21.17349
3   Shop3 -86.84672 21.14235
                                                                                  address
1                                                   Av Coba 9, 22, 77500 Cancún, Q.R., Mexico
2                                     Carr. Tulum - Cancún 3d, 63, 77513 Cancún, Q.R., Mexico
3 Av Kohunlich Smza 50 Mza 27 Lotes 102 103 y 104, Capistrano, 50, 77533 Cancún, Q.R., Mexico

可能错误是由 Google API return 编辑的,因为在特定时间后未能 return 地址, 很常见。您可以通过添加一个条件循环来解决它,让它一直尝试直到所有地址都被 returned:

dt$address <- NA

while( anyNA(dt$address) ) {
  for( i in 1:nrow(dt) ) {
    if( is.na(dt[i,"address"]) ) {
      dt$address[i] <- revgeocode( as.numeric(dt[i, c("LON","LAT")]), output = "address" )
    }
  }
}