2014-10-10 101 views
3

嗨,我有一系列的住宅和一系列火車站。我想計算每個家庭(n = 1718)到每個家庭(n = 11)的步行距離。我知道谷歌限制你每天2000 obs,所以我會做所有家庭obs到1站。我的數據是這樣的:使用經緯度向量查找R中的步行距離

Home data:      

     longitude latitude    
    1 -76.27769 36.86308 
    2 -76.29188 36.87556 
    3 -76.26982 36.86628 
    4 -76.27455 36.86894 

    Station Data 
     Longitude Latitude 
    1 -76.30377 36.85945 
    2 -76.29490 36.85395 
    3 -76.28896 36.85156 
    4 -76.28989 36.84719 
    5 -76.28579 36.84568 

,我發現這樣的代碼,但它總結的距離爲每一個家庭,而不是爲每個home.I'm漂亮的新R上的距離...幫助!

`distHoras <- function(origin, destination){ 

    origin <- gsub(",", "", origin) 
    origin <- gsub(" ", "+", origin) 
    origin <- paste("origins=", origin, sep = "") 

    destination <- gsub(",", "", destination) 
    destination <- gsub(" ", "+", destination) 
    destination <- paste("destination=", paste(destination, 
               collapse = "|"), sep = "") 


    mode4url <- paste("mode=", 'walking', sep = "") 
    lang4url <- paste("language=", 'en-EN', sep = "") 
    sensor4url <- paste("sensor=", tolower(as.character(FALSE)), 
         sep = "") 
    posturl <- paste(origin, destination, mode4url, sensor4url, 
        sep = "&") 
    url_string <- paste("http://maps.googleapis.com/maps/api/distancematrix/json?", 
         posturl, sep = "") 
    url_string <- URLencode(url_string) 
    connect <- url(url_string) 
    tree <- fromJSON(paste(readLines(connect), collapse = "")) 
    close(connect) 
    rapply(tree$rows,I) 
}` 

我得到這樣

distHoras('origin', 'destination') 
elements.distance.text elements.distance.value 
      "1,253 km"    "1252635" 
elements.duration.text elements.duration.value 
     "9 days 8 hours"    "804659" 
     elements.status 
        "OK" 

回答

1

像這樣的事情?輸出

google.dist <- function(from,to,mode="walking") { 
    require(httr) 
    require(XML) 
    url <- "https://maps.googleapis.com/maps/api/distancematrix/xml" 
    origin <- paste(with(from,paste(latitude,longitude,sep=",")),collapse="|") 
    dest <- paste(with(to,paste(latitude,longitude,sep=",")),collapse="|") 
    response <- GET(url,query=list(origins=origin,destinations=dest,mode=mode)) 
    doc  <- content(response,type="text/xml") 
    status <- sapply(doc["//row/element/status"],xmlValue) 
    if(any(status!="OK")) warning("Error Status on some routes") 
    distance <- sapply(doc["//row/element/distance/value"],xmlValue) 
    data.frame(expand.grid(to=1:nrow(to),from=1:nrow(from)),distance=as.numeric(distance)) 
} 
google.dist(Home,Station) 
# to from distance 
# 1 1 1  3275 
# 2 2 1  2494 
# 3 3 1  2163 
# 4 4 1  2548 
# 5 5 1  2212 
# 6 1 2  2539 
# 7 2 2  2950 
# 8 3 2  3288 
# 9 4 2  3815 
# 10 5 2  4034 
# ... 

這使用帶有XML輸出的Google Distance Matrix API。返回的數據幀的行號分別爲tofrom數據幀,距離爲,它們之間的距離爲。 API記錄爲here。請仔細注意terms of use

相關問題