Как получить (выбрать) долготу и широту для заданного адреса в R

Я обрабатываю данные объекта в R с дополнительной геоинформацией, такой как название улицы, номер улицы, почтовый индекс и город из Германии. Я хочу использовать функцию для получения информации о долготе и широте для конкретного адреса и обновления моего фрейма данных. С долготой и широтой для каждого объекта из этого фрейма данных я создаю geom_point в qmap.

Любая помощь или информация о возможном решении в R или о том, где можно найти дополнительную информацию, приветствуются. Себастьян


person SebastianS    schedule 25.03.2015    source источник


Ответы (1)


Вы можете использовать Google Maps API для обратного геокодирования, но скорость будет ограничена довольно быстро. Уже есть пакет R, который использует этот API Google, но я написал эту функцию для обратного геокодирования с использованием API openstreetmap. Однако не забудьте указать свою электронную почту в звонке, чтобы они могли связаться с вами, если вы начнете нагружать их сервер.

FindGPS <- function(cityname)  {
  library("RJSONIO") 
  cityname <- gsub(" ","\\+",cityname) #add '+' character to URL 
  #Open Connection
  SITE <- paste('http://nominatim.openstreetmap.org/
          search?q=',cityname,'&format=json&email=
          [email protected]', sep="") 
  con <- url(SITE)
  data.json <- fromJSON(paste(readLines(con,warn=FALSE),
                              collapse=""))
  close(con)
  t<-length(data.json)

  if(t>0)   {
    lat <- data.json[[1]]$lat
    long <- data.json[[1]]$lon
    latlong<-c(lat, long)
    return (latlong)
  }
}
person Chris Bail    schedule 26.03.2015
comment
Привет Крис, спасибо за вашу функцию. Мне нужен lon и lat для данной улицы и номера улицы в городе. Итак, мой кадр данных выглядит как улица; улица_номер;почтовый_индекс;город. Могу ли я расширить фрагмент названия города в FindGPS, указав улицу, номер улицы и город? В конце функции return(latlon) мне нужно обновить свой фрейм данных двумя новыми полями lon и lat. - person SebastianS; 26.03.2015
comment
Я думаю да, но я не использовал этот код несколько лет — может быть, проверить документацию по API? - person Chris Bail; 26.03.2015