使用 googleway 的经纬度坐标反向地理编码循环的问题:r 对不同的坐标给出相同的结果

Problems with reverse geocoding loops with latitude longitude co-ordinates using googleway: r gives the same results for different co-ordinates

这是我的示例数据集(称为 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)
}

它适用于前三或四行,但随后 returns 与第一行的地址相同,尽管纬度和经度数字肯定不同。我查看了其他 Whosebug 问题 (here) 并尝试复制他们的方法但结果类似。

请帮忙!

看起来对 google_geocode 的调用可以 return 每个 lat/longitude 对的多个地址,因此您可能会覆盖输出数据帧中的数据。
另外,我不确定您的 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 return 的地址,我只是从结果中提取了第一个地址,保存了对 Internet 的调用(性能改进)。此外,由于呼叫 return 是一个状态,我检查是否正常,如果存在则保存第一个地址。

希望对您有所帮助。