我想使用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
警告返回?
谢谢!
答案 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" )
}
}
}