r - 使用 googleway 使用经纬度坐标进行反向地理编码循环的问题:r 对不同坐标给出相同的结果
问题描述
这是我的示例数据集(称为 origAddress):
lat lng
1.436316 103.8299
1.375093 103.8516
1.369347 103.8398
1.367353 103.8426
我有更多的纬度和经度数字(330),我想找到地址。我用这个 for 循环来做到这一点:
for(i in 1:nrow(origAddress))
{
# Print("Working...")
result <- google_reverse_geocode(location = c(origAddress$lat[i],origAddress$lng[i]),
key = key,
location_type = "rooftop")
if(is.null(result) || length(dim(result)) < 2 || !nrow(result)) next
origAddress$venadd <- geocode_address(result)
}
它适用于前三或四行,但随后返回与第一行相同的地址,尽管纬度和经度数字肯定不同。我查看了其他 stackoverflow 问题(此处)并尝试复制他们的方法,但结果相似。
请帮忙!
解决方案
看起来对 google_geocode 的调用可以为每个纬度/经度对返回多个地址,因此您可能会覆盖输出数据框中的数据。
另外,我不确定您的 if 语句是否正确评估。
这是我对您的问题的尝试:
library(googleway)
origAddress<-read.table(header = TRUE, text = "lat lng
1.436316 103.8299
1.375093 103.8516
1.369347 103.8398
1.367353 103.8426")
#add the output column
origAddress$venadd<-NA
for(i in 1:nrow(origAddress))
{
# Print("Working...")
result <- google_reverse_geocode(location = c(origAddress$lat[i],origAddress$lng[i]),
key=key,
location_type = "rooftop")
#add a slight pause so not to overload the call requests
Sys.sleep(1)
if(result$status =="OK" ){
#multiple address can be returned with in gecode request picks the first one
origAddress$venadd[i] <- result$results$formatted_address[1]
#use this to collect all addresses:
#paste(result$results$formatted_address, collapse = " ")
}
}
由于对 google_reverse_geocode 的调用返回了地址,因此我只需从结果中提取第一个地址,保存对 Internet 的调用(性能改进)。此外,由于调用返回一个状态,我检查一个 OK,如果存在则保存第一个地址。
希望这可以帮助。
推荐阅读
- jenkins-job-dsl - 詹金斯重新加载dsl
- json - 如何在 .env 文件中定义对象数组?
- python - Matplotlib 在不同形状图之间填充
- qemu - 没有图像的 QEMU 快照?
- bash - 使用换行符将文件夹和子文件夹中的所有文件连接到一个文件
- mongodb - 如何在 MongoDB 中按具有条件的多个字段进行排序
- python-3.x - 在 Keras/Tensorflow 中创建自定义损失函数时指定梯度函数
- java - 处理 AmazonServiceException 中抛出的不同错误代码
- python - 如何为烛台图添加标签?
- excel - Excel 按日期范围和名称搜索