2016-11-23 4 views
1

Примечание: У меня нет большого опыта работы с Р. Я надеюсь, что это не слишком над моей головой!Обратный геокодирование Множественный Lon/Lat R

Я пытаюсь изменить геокодирование набора данных долготы и широт США на их почтовые индексы.

Во-первых, я бы предпочел что-то, что не ограничено запросами (например, API карт google). Если это невозможно, вам будет очень полезно помочь в следующем.

Я научился менять геокодированные отдельные координаты с помощью функции reverseGeoCode(), найденной из следующего блога post. Он отлично работает, но я пытаюсь изменить геокодирование списка координат.

#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" 

Если вы вместо того, чтобы иметь list с lat и lon компонентов, вы можете использовать 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.

Смежные вопросы