私は都市名と国の長いリストを持っています、そして私はそれらを地図上にプロットしたいと思います。これを行うには、各都市の経度と緯度の情報が必要です。
私のテーブルは呼び出されtest
、次の構造になっています。
Cityname CountryCode
New York US
Hamburg DE
Amsterdam NL
私は都市名と国の長いリストを持っています、そして私はそれらを地図上にプロットしたいと思います。これを行うには、各都市の経度と緯度の情報が必要です。
私のテーブルは呼び出されtest
、次の構造になっています。
Cityname CountryCode
New York US
Hamburg DE
Amsterdam NL
次のコードで問題を解決しました。
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
}
これは外部サービス(openstreetmaps.org)を呼び出しているため、より大きなデータセットの場合は時間がかかることがあります。ただし、新しい都市がリストに追加されたときに、これを行うのはたまにしかありません。
あなたのための他のいくつかのオプション。
ggmap
ggmaps には、geocode
Google マップを使用してジオコーディングする機能があります。これにより、1 日あたり 2,500 に制限されます。
taRifx.geo
taRifx.geo の最新バージョンには、geocode
Google または Bing Maps を使用してジオコーディングする機能があります。Bing バージョンでは、(無料の) Bing アカウントを使用する必要がありますが、代わりに、より多くのエントリをジオコーディングできます。このバージョンの機能:
これを試してみてください。この問題のより良い解決策になると思います
> library(ggmap)
Loading required package: ggplot2
Google Maps API Terms of Service: http://developers.google.com/maps/terms.
Please cite ggmap if you use it: see citation('ggmap') for details.
#Now you can give city name or country name individually
> geocode("hamburg")
Information from URL : http://maps.googleapis.com/maps/api/geocode/json?address=hamburg&sensor=false
lon lat
1 9.993682 53.55108
geocode("amsterdam")
Information from URL : http://maps.googleapis.com/maps/api/geocode/json?address=amsterdam&sensor=false
lon lat
1 4.895168 52.37022
> geocode("new york")
Information from URL : http://maps.googleapis.com/maps/api/geocode/json?address=new+york&sensor=false
lon lat
1 -74.00594 40.71278