3

Google Geocoding API から緯度/経度を取得しようとしていますが、住所にデンマークのローカル文字が含まれているとリクエストが失敗します。httr::GET 関数が URL をエンコードしているためだと思われますが、それが正しいかどうかはよくわかりません。

このリンクをコピーしてブラウザーに直接貼り付けると、有効な結果が得られます: http://maps.googleapis.com/maps/api/geocode/json?address =Søholmen+9,+4500+Denmark

ただし、GET 関数に解析される前の URL は同じですが、以下のコードは無効です。ご当地キャラを使わずに住所を使うとうまくいきます。

library(httr)
library(jsonlite)
library(stringr)

address <- "Søholmen 9, 4500 Denmark"
# address <- "Kronprinsesse Sofies Vej 6, 2000 Denmark"

base_url <- "http://maps.googleapis.com/maps/api/geocode/json?"

# An address OR components
geo_url <- paste0(base_url, "address=", str_replace_all(address, pattern = " ", replacement = "+"))

# Get the result
# get the content
# Parse the JSON
temp_geo_results <- httr::GET(url = URLencode(URL = geo_url), verbose())
temp_geo_results <- httr::content(temp_geo_results, as = "text")
temp_geo_results <- jsonlite::fromJSON(temp_geo_results)

これが私の sessionInfo() です

R version 3.1.2 (2014-10-31)
Platform: x86_64-w64-mingw32/x64 (64-bit)

locale:
[1] LC_COLLATE=Danish_Denmark.1252  LC_CTYPE=Danish_Denmark.1252        LC_MONETARY=Danish_Denmark.1252
[4] LC_NUMERIC=C                    LC_TIME=Danish_Denmark.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] stringr_0.6.2   jsonlite_0.9.10 httr_0.5       

loaded via a namespace (and not attached):
[1] RCurl_1.95-4.3 tools_3.1.2 

編集:質問に不要なコード行を削除し、sessionInfo を追加しました。

4

4 に答える 4

0

rvest パッケージを使用できます

library(rvest); library(jsonlite)
address <- "Søholmen 9, 4500 Denmark"
# address <- "Kronprinsesse Sofies Vej 6, 2000 Denmark"
base_url <- "http://maps.googleapis.com/maps/api/geocode/json?"

# An address OR components
geo_url <- paste0(base_url, "address=", str_replace_all(address, pattern = " ", replacement = "+"))
geo_url <- iconv(geo_url, to="UTF-8")

temp_geo_results <- html_text(html_nodes(html(geo_url) , "p"))
temp_geo_results <- fromJSON(temp_geo_results)
于 2015-03-02T14:01:57.333 に答える