首页 > 解决方案 > 使用 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 问题(此处)并尝试复制他们的方法,但结果相似。

请帮忙!

标签: rloopsggmaprgooglemapsgoogleway

解决方案


看起来对 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,如果存在则保存第一个地址。

希望这可以帮助。


推荐阅读