Với đoạn mã sau tôi đã giải quyết thành công vấn đề.
library(RJSONIO)
nrow <- nrow(test)
counter <- 1
test$lon[counter] <- 0
test$lat[counter] <- 0
while (counter <= nrow){
CityName <- gsub(' ','%20',test$CityLong[counter]) #remove space for URLs
CountryCode <- test$Country[counter]
url <- paste(
"http://nominatim.openstreetmap.org/search?city="
, CityName
, "&countrycodes="
, CountryCode
, "&limit=9&format=json"
, sep="")
x <- fromJSON(url)
if(is.vector(x)){
test$lon[counter] <- x[[1]]$lon
test$lat[counter] <- x[[1]]$lat
}
counter <- counter + 1
}
Vì đây gọi là dịch vụ bên ngoài (openstreetmaps.org) có thể mất một thời gian cho các tập dữ liệu lớn hơn. Tuy nhiên, bạn có thể chỉ làm điều này một lần trong một thời gian khi các thành phố mới đã được thêm vào danh sách.
Bạn cũng có thể làm điều này với GNsearch từ gói địa lý của tôi - nó gọi dịch vụ web geonames.org chia sẻ rất nhiều dữ liệu của nó với dịch vụ Nominatim của OpenStreetMap. – Spacedman
@Jochem Làm thế nào để tôi làm ngược lại điều này? Tôi có vĩ độ và kinh độ và tôi cần phải tìm tên thành phố và quốc gia bằng cách sử dụng đường phố mở thông qua định dạng json như bạn đã làm ở trên? –