2012-03-29 45 views
0

與Mapquest服務的方向API合作,繪製上千使用GGPLOT2路線的R.的R - 矢量化一個JSON調用

Basic代碼理論:有結束位置的列表和一個起始位置。對於每個結束位置,調用fromJSON都會返回Mapquest中的路由座標。從那裏,已經向ggplot2的geom_path geom矢量化了座標的分配(在列表中讀作列表)。

現在,在~1200條記錄的位置集上運行這需要大約4分鐘。我很想把它弄下來。任何關於如何將來自JSON的響應矢量化(返回列表清單)?

Windows 7中,64位,R 2.14.2

庫:plyr,GGPLOT2,rjson,mapproj,XML

k = 0 
start_loc  = "263+NORTH+CENTER+ST.,+MESA+ARIZ." 
end_loc   = funder_trunc[,length(funder_trunc)] 
route_urls  = paste(mapquest_baseurl, "&from=", start_loc, "&to=", end_loc, "&ambiguities=ignore", sep="") 

for (n in route_urls) { 

route_legs  = fromJSON(file = url(n))$route$legs[[1]]$maneuvers 
lats    = unlist(lapply(route_legs, function(x) return(x$startPoint[[2]]))) 
lngs    = unlist(lapply(route_legs, function(x) return(x$startPoint[[1]]))) 
frame   = data.frame(cbind(lngs, lats)) 
path_added  = geom_path(aes(lngs, lats), data = frame) 
p    = p + path_added 
k = k + 1 
print(paste("Processed ", k, " of ", nrow(funder_trunc), " records in set.", sep="")) 

} 
+0

'庫(並行)'和一個合適的後端? – Chase 2012-03-29 21:34:33

回答

0

的肢體,走出去在這裏,因爲我不使用rjsonmapproj,但似乎是數千次調用服務器是真正的罪魁禍首。如果mapquest服務器沒有允許您一次發送多個請求的API,則會遇到麻煩。如果是這樣,那麼你需要找出如何使用/修改rjson和/或mapproj來調用它...

正如@Chase說,你可能可以並行調用它,但服務器贏得'就像從同一個客戶端獲得太多的並行請求 - 它可能會禁止你。順便說一句,它可能甚至不想從同一客戶端快速連續獲取數千個串行請求 - 但顯然你當前的代碼工作,所以我想它不介意。