Проблемы с обратными циклами геокодирования с координатами широты и долготы с помощью googleway: r дает одинаковые результаты для разных координат - PullRequest
0 голосов
/ 30 апреля 2018

Вот мой примерный набор данных (называемый origAddress):

lat  lng
1.436316  103.8299
1.375093  103.8516
1.369347  103.8398
1.367353  103.8426

У меня есть много строк чисел широты и долготы (330), и я хотел бы найти адрес. Я использовал это для цикла, чтобы сделать это:

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

Он работает для первых трех или четырех строк, но затем возвращает тот же адрес, что и первая строка, хотя значения широты и долготы определенно отличаются. Я посмотрел на другие вопросы, связанные со стековым потоком ( здесь ), и попытался скопировать их подход с похожими плохими результатами.

Пожалуйста, помогите!

1 Ответ

0 голосов
/ 02 мая 2018

Похоже, что вызовы 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 возвращает адрес, я просто извлекаю первый адрес из результата, сохраняя вызов в Интернет (повышение производительности). Кроме того, поскольку вызов возвращает статус, я проверяю наличие OK и, если существует, сохраняю первый адрес.

Надеюсь, это поможет.

...