2016-11-23 97 views
1

注意:我對R沒有太多經驗,我希望這不會太過頭我!反向地理編碼多個Lon/Lat R

我想將美國經度和緯度的數據集轉換爲他們的郵政編碼。首先,我寧願不受限於查詢(如google maps API)的東西。如果這是不可能的,非常感謝以下幫助。

我學會了使用從以下博客post中找到的函數reverseGeoCode()來反轉地理編碼單個座標。它工作的很好,但我試圖扭轉地理編碼的座標列表。

#load in my data 
dir() 
tw.data <- read.csv(file.choose(),header=T) 
#organize coodinates 
long <- tw.data[,7] 
lat <- tw.data[,8] 
coords <- cbind(long,lat) 

#reverse geocoding 
reverseGeoCode <- function(latlng) { 
latlngStr <- gsub(' ','%20', paste(latlng, collapse=","))#Collapse and Encode  URL Parameters 
    library("RJSONIO") #Load Library 
    #Open Connection 
    connectStr <- paste('http://maps.google.com/maps/api/geocode/json?sensor=false&latlng=',latlngStr, sep="") 
    con <- url(connectStr) 
    data.json <- fromJSON(paste(readLines(con), collapse="")) 
    close(con) 
    #Flatten the received JSON 
    data.json <- unlist(data.json) 
    if(data.json["status"]=="OK") 
    address <- data.json["results.formatted_address"] 
    return (address) 
} 
addresses <- reverseGeoCode(coords) 
addresses 

我是否需要以不同方式組織我的座標?這個功能是否甚至不能處理多個點?

任何幫助將greaaatly apprediated :)

+1

該API已被'ggmap :: revgeocode' – alistaire

回答

0

假設你有座標的matrix。您可以使用apply

#create some random coordinates 
set.seed(3) 
coords<-matrix(runif(10,0,45),ncol=2) 
#   [,1]  [,2] 
#[1,] 7.561869 27.197732 
#[2,] 36.338238 5.608505 
#[3,] 17.322406 13.257042 
#[4,] 14.748044 25.992446 
#[5,] 27.094530 28.394067 
apply(coords,1,reverseGeoCode) 
#[1] "Wau, South Sudan"             
#[2] "Unnamed Road, Dehamcha, Algeria"         
#[3] "Nguigmi, Niger"             
#[4] "Mellit, Sudan"              
#[5] "Al Farafra - Al Wahat, Al Farafrah, New Valley Governorate, Egypt" 

如果不是有與latlon組件list,你可以使用mapply

coordlist<-list(lat=coords[,1],lon=coords[,2]) 
#$lat 
#[1] 7.561869 36.338238 17.322406 14.748044 27.094530 
#$lon 
#[1] 27.197732 5.608505 13.257042 25.992446 28.39406 
mapply(function(x,y) reverseGeoCode(c(x,y)),coordlist$lat,coordlist$lon) 
#same output as above 

由於已經從註釋中說明,revgeocode功能從ggmap包做你的reverseGeoCode做什麼。