Решение ошибки «объект <myvariable>не найден» в геокодировании - PullRequest
1 голос
/ 30 октября 2019

В настоящее время я переписываю адреса, чтобы преобразовать их в геокод и построить их. Я не использую googlemapsAPI, так как для доступа к нему необходим номер кредитной карты. Вместо этого я использую другой сайт. Результатом должен быть список адресов с их конкретными long и lat, показывающий истекшее время для расчета.

library(dplyr)
library(jsonlite)

nominatim_osm <- function(address = NULL)
{
  if(suppressWarnings(is.null(address)))
    return(data.frame())
  tryCatch(
    d <- jsonlite::fromJSON( 
      gsub('\\@addr\\@', gsub('\\s+', '\\%20', address), 
           'http://nominatim.openstreetmap.org/search/@addr@?format=json&addressdetails=0&limit=1')
    ), error = function(c) return(data.frame())
  )
  if(length(d) == 0) return(data.frame())
  return(data.frame(lon = as.numeric(d$lon), lat = as.numeric(d$lat)))
}
addresses <- c("Baker Street 221b, London", "Brandenburger Tor, Berlin", 
               "Platz der Deutschen Einheit 1, Hamburg", "Arc de Triomphe de l’Etoile, Paris",
               "Дворцовая пл., Санкт-Петербург, Россия")


d <- suppressWarnings(lapply(addresses, function(address) {
  #set the elapsed time counter to 0
  t <- Sys.time()
  #calling the nominatim OSM API
  api_output <- nominatim_osm(address)
  #get the elapsed time
  t <- difftime(Sys.time(), t, 'secs')
  #return data.frame with the input address, output of the nominatim_osm function and elapsed time
  return(data.frame(address = address, api_output, elapsed_time = t))
}) %>%
  #stack the list output into data.frame
  bind_rows() %>% data.frame())
#output the data.frame content into console
d 

При компиляции верхнего кода я получаю следующую ошибку:

 Error in nominatim_osm(address) : object 'd' not found 

Я надеюсь, что вы сможете мне помочь, большое спасибо заранее.

...