我試圖從谷歌地理編碼API獲取經緯度,但當丹麥本地字符在地址中時請求失敗。我懷疑這是因爲httr :: GET函數會對url進行編碼,但我不確定我是否正確。避免在R的網址編碼
如果複製/直接粘貼此鏈接到瀏覽器中,你得到一個有效的結果: http://maps.googleapis.com/maps/api/geocode/json?address =Søholmen+ 9,+ 4500 +丹麥
但下面的代碼是無效的,即使網址是同前它被解析成GET函數。如果我使用沒有本地字符的地址,它會起作用。
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。
也許另一種選擇是使用另一種編碼選項,並建立使用功能build_url/parse_url網址從httr包,但我不知道如何做到這一點。 – KERO 2015-03-02 09:15:57
此網址也提供了正確的回覆: 'http://maps.googleapis.com/maps/api/geocode/json?address = S%C3%B8holmen + 9,+ 4500 + Denmark' 因此,您可能需要手動編碼,像@KERO建議,然後它會工作。 – LauriK 2015-03-02 09:17:26
@LauriK如果我複製/粘貼您的網址到我的瀏覽器和GET功能,我收到了一個「壞請求」/「零結果」回來。 – KERO 2015-03-02 09:23:55