2012-03-29 44 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说,你可能可以并行调用它,但服务器赢得'就像从同一个客户端获得太多的并行请求 - 它可能会禁止你。顺便说一句,它可能甚至不想从同一客户端快速连续获取数千个串行请求 - 但显然你当前的代码工作,所以我想它不介意。