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

时间:2018-06-18 16:51:54

标签: r ggmap geocode

我想使用ggmap的函数revgeocode添加一个列,该列具有data.table中列出的每个商店的文本地址,基于商店的地理编码(经度和纬度)。< / p>

为此,我有一个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:在revgeocode中(as.numeric(sucs [i,c(“LONGITUD”,“LATITUD”)]),输出   =“地址”,:反向地理编码失败 - 位置不好? location =“ - 86.8266333”反向地理编码失败 - 位置不好? location =   “21.1734889”

理论上,这些代码都应该正常工作,因为商店的地理编码是直接从Google地球中提取的。有没有人弄清楚为什么有些goecodes会以bad location警告返回?

谢谢!

1 个答案:

答案 0 :(得分:0)

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

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可能返回了错误,原因是在一定时间后未能返回地址,这很常见。您可以通过添加条件循环来解决该问题,使其不断尝试直到返回所有地址:

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" )
    }
  }
}