14

私は都市名と国の長いリストを持っています、そして私はそれらを地図上にプロットしたいと思います。これを行うには、各都市の経度と緯度の情報が必要です。

私のテーブルは呼び出されtest、次の構造になっています。

Cityname  CountryCode
New York  US
Hamburg   DE
Amsterdam NL
4

3 に答える 3

17

次のコードで問題を解決しました。

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)を呼び出しているため、より大きなデータセットの場合は時間がかかることがあります。ただし、新しい都市がリストに追加されたときに、これを行うのはたまにしかありません。

于 2012-12-16T20:16:02.010 に答える
14

あなたのための他のいくつかのオプション。

ggmap

ggmaps には、geocodeGoogle マップを使用してジオコーディングする機能があります。これにより、1 日あたり 2,500 に制限されます。

taRifx.geo

taRifx.geo の最新バージョンには、geocodeGoogle または Bing Maps を使用してジオコーディングする機能があります。Bing バージョンでは、(無料の) Bing アカウントを使用する必要がありますが、代わりに、より多くのエントリをジオコーディングできます。このバージョンの機能:

  • サービスの選択 (Bing と Google マップの両方をサポート)
  • ログインのサポート (特に Bing の場合、アカウント キーが必要ですが、その代わりに、1 桁以上の毎日のリクエストが可能になります)
  • 一度に全体の data.frame をジオコーディングします。これには、既にジオコーディングされた行を無視するなどの時間の節約が含まれます。
  • 堅牢なバッチ ジオコーディング (大きなジョブの場合、エラーによって data.frame 全体のジオコーディングの価値が失われないようにするため)
  • ルート検索(A地点からB地点までの移動時間)
于 2012-12-16T20:34:28.663 に答える
8

これを試してみてください。この問題のより良い解決策になると思います

> 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

于 2015-03-25T09:36:41.433 に答える