使用 OpenStreetMap 和 R 搜索城市
Search cities using OpenStreetMap and R
我想使用 R 中的 OpenStreetMap 获取列表中每个城市的 GPS 坐标。我的代码基于这个非常好 example。
唯一的区别是我想在city name
和country code
的基础上加上county name
。下面是我的代码:
cities = data.frame(nom=c("Toulouse", "Paris", "Égletons", "Marseille",
"Clermont Ferrand"), region=c("Haute-Garonne", "Paris", "Corrèze",
"Bouches-du-Rhône", "Puy-de-Dôme"), pays=rep("FR",5))
locateCountry = function(nameCity, nameCounty, codeCountry) {
cleanCityName = gsub(' ', '%20', nameCity)
cleanCountyName = gsub(' ', '%20', nameCounty)
url = paste(
"http://nominatim.openstreetmap.org/search?city="
, cleanCityName
, "&county="
, cleanCountyName
, "&countrycodes="
, codeCountry
, "&limit=9&format=json"
, sep="")
resOSM = fromJSON(url)
if(length(resOSM) > 0) {
return(c(resOSM[[1]]$lon, resOSM[[1]]$lat))
} else return(rep(NA,2))
}
coords <- t(apply(cities, 1, function(aRow) locateCountry(aRow[1], aRow[2])))
不幸的是,我收到以下消息:
Error in paste("http://nominatim.openstreetmap.org/search?city=", cleanCityName, :
argument "codeCountry" is missing, with no default
我也在寻找一种方法来合并提取的坐标 coords
和 cities
。
有人能帮忙吗?
答案:
library(OpenStreetMap)
library(RJSONIO)
cities = data.frame(nom=c("Toulouse", "Paris", "Égletons", "Marseille",
"Clermont Ferrand"), region=c("Haute-Garonne", "Paris", "Corrèze",
"Bouches-du-Rhône", "Puy-de-Dôme"), pays=rep("FR",5),
effectif=c(20,5,15,3,3))
print(cities)
locateCountry = function(nameCity, nameCounty, codeCountry) {
cleanCityName = gsub(' ', '%20', nameCity)
cleanCountyName = gsub(' ', '%20', nameCounty)
url = paste(
"http://nominatim.openstreetmap.org/search?city="
, cleanCityName
, "&county="
, cleanCountyName
, "&country="
, "FR"
, "&limit=9&format=json"
, sep="")
resOSM = fromJSON(url)
if(length(resOSM) > 0) {
return(c(resOSM[[1]]$lon, resOSM[[1]]$lat))
} else return(rep(NA,2))
}
coords <- t(apply(cities, 1, function(aRow) locateCountry(aRow[1], aRow[2])))
cities$lat <- coords[,1]
cities$lon <- coords[,2]
我想使用 R 中的 OpenStreetMap 获取列表中每个城市的 GPS 坐标。我的代码基于这个非常好 example。
唯一的区别是我想在city name
和country code
的基础上加上county name
。下面是我的代码:
cities = data.frame(nom=c("Toulouse", "Paris", "Égletons", "Marseille",
"Clermont Ferrand"), region=c("Haute-Garonne", "Paris", "Corrèze",
"Bouches-du-Rhône", "Puy-de-Dôme"), pays=rep("FR",5))
locateCountry = function(nameCity, nameCounty, codeCountry) {
cleanCityName = gsub(' ', '%20', nameCity)
cleanCountyName = gsub(' ', '%20', nameCounty)
url = paste(
"http://nominatim.openstreetmap.org/search?city="
, cleanCityName
, "&county="
, cleanCountyName
, "&countrycodes="
, codeCountry
, "&limit=9&format=json"
, sep="")
resOSM = fromJSON(url)
if(length(resOSM) > 0) {
return(c(resOSM[[1]]$lon, resOSM[[1]]$lat))
} else return(rep(NA,2))
}
coords <- t(apply(cities, 1, function(aRow) locateCountry(aRow[1], aRow[2])))
不幸的是,我收到以下消息:
Error in paste("http://nominatim.openstreetmap.org/search?city=", cleanCityName, :
argument "codeCountry" is missing, with no default
我也在寻找一种方法来合并提取的坐标 coords
和 cities
。
有人能帮忙吗?
答案:
library(OpenStreetMap)
library(RJSONIO)
cities = data.frame(nom=c("Toulouse", "Paris", "Égletons", "Marseille",
"Clermont Ferrand"), region=c("Haute-Garonne", "Paris", "Corrèze",
"Bouches-du-Rhône", "Puy-de-Dôme"), pays=rep("FR",5),
effectif=c(20,5,15,3,3))
print(cities)
locateCountry = function(nameCity, nameCounty, codeCountry) {
cleanCityName = gsub(' ', '%20', nameCity)
cleanCountyName = gsub(' ', '%20', nameCounty)
url = paste(
"http://nominatim.openstreetmap.org/search?city="
, cleanCityName
, "&county="
, cleanCountyName
, "&country="
, "FR"
, "&limit=9&format=json"
, sep="")
resOSM = fromJSON(url)
if(length(resOSM) > 0) {
return(c(resOSM[[1]]$lon, resOSM[[1]]$lat))
} else return(rep(NA,2))
}
coords <- t(apply(cities, 1, function(aRow) locateCountry(aRow[1], aRow[2])))
cities$lat <- coords[,1]
cities$lon <- coords[,2]