因此,這是在Google上使用reverse geocoding API的替代方案。該代碼部分基於this reference。
呼喚你的數據幀以上df
,
reverseGeoCode <- function(latlng) {
require("XML")
require("httr")
latlng <- as.numeric(latlng)
latlngStr <- gsub(' ','%20', paste(round(latlng,2), collapse=","))
url <- "http://maps.google.com"
path <- "/maps/api/geocode/xml"
query <- list(sensor="false",latlng=latlngStr)
response <- GET(url, path=path, query=query)
if (response$status !=200) {
print(paste("HTTP Error:",response$status),quote=F)
return(c(NA,NA))
}
xml <- xmlInternalTreeParse(content(response,type="text"))
status <- xmlValue(getNodeSet(xml,"//status")[[1]])
if (status != "OK"){
print(paste("Query Failed:",status),quote=F)
return(c(NA,NA))
}
xPath <- '//result[1]/address_component[type="country"]/long_name[1]'
country <- xmlValue(getNodeSet(xml,xPath)[[1]])
xPath <- '//result[1]/address_component[type="administrative_area_level_1"]/long_name[1]'
state <- xmlValue(getNodeSet(xml,xPath)[[1]])
return(c(state=state,country=country))
}
st.cntry <- t(apply(df,1,function(x)reverseGeoCode(x[2:3])))
result <- cbind(df,st.cntry)
result
# Point_Name Longitude Latitude state country
# 1 University of Arkansas 36.06783 -94.17365 Arkansas United States
# 2 Lehigh University 40.60146 -75.36006 Pennsylvania United States
# 3 Harvard University 42.37939 -71.11590 Massachusetts United States
在API定義中, 「administrative_area_level_1」 低於國家的最高行政區域。在美國,這些是國家。在其他國家,定義各不相同(例如,可能是省份)。
順便說一句,我相當肯定你有經度和緯度逆轉。
看一看[**這個問題**](http://stackoverflow.com/questions/14334970/convert-latitude-and-longitude-coordinates-to-country-name-in-r ?rq = 1),從本頁右邊空白處的「相關」列表中挑選出來。 – Henrik
[這個答案](http://stackoverflow.com/a/8751965/980833)會讓你的狀態。 –
謝謝,我不知道我是如何錯過的(我曾看過相當多的數字,但沒有找到那些) - 只要我根據舊的答案得到腳本,我將刪除我的Q. – Ell