2014-12-29 2 views
0

ggmap을 사용하여 여러 개의 웨이 포인트가있는 라우트를 구축 중이지만 라우트 기능은 웨이 포인트를 처리하지 않는 것 같습니다. 나는 하나의 from/to만으로 작업 할 수 있습니다.route & geom_leg에 대한 함수 호출의 각 유형에 대해

이 문제를 극복하기 위해 각 다리마다 route() 및 geom_leg()를 호출하여 다리로 경로를 만드는 방법을 생각했습니다. 이는 코드 반복으로 인해 이상적이지 않습니다.

내가 이것을 벡터화 할 수 있는지 궁금합니다.

예로서. 시작/이명 령 호출 경로의 각 벡터에 대한

  1. 플롯 자료지도
  2. /geom_leg

나는 아래의 샘플 코드를 만들었습니다. 반복을 줄이기위한 이상적인 방법은 무엇입니까?

start<-c("CH1 6JS","CH1 1RS","CH1 2HT") 
dest<-c("CH1 1RS","CH1 2HT","CH1 3DX") 

leg <-function(start, dest) 
    return (route(from=start,to=dest,mode = c("walking"),structure = c("legs"))) 

l<-leg(start[1], dest[1]) 

base<-qmap('Chester, UK', zoom = 15, maptype = 'road', 
    base_layer = ggplot(aes(x = startLon, y = startLat), data = l)) 

b<-geom_leg(aes(x = startLon, y = startLat, xend = endLon, yend = endLat), 
    alpha = 2/4, size = 2, data = l, colour = 'red') 

l<-leg(start[2], dest[2]) 
c<-geom_leg(aes(x = startLon, y = startLat, xend = endLon, yend = endLat), 
       alpha = 2/4, size = 2, data = l, colour = 'red') 

l<-leg(start[3], dest[3]) 
d<-geom_leg(aes(x = startLon, y = startLat, xend = endLon, yend = endLat), 
      alpha = 2/4, size = 2, data = l, colour = 'red') 

base+b+c+d 

답변

0

나는 루프를 사용했다.

start<-c("CH1 6JS","CH1 1RS","CH1 2HT") 
dest<-c("CH1 1RS","CH1 2HT","CH1 3DX") 

df<-data.frame(start,dest) 


leg <-function(start, dest){ 

    r<- route(from=start,to=dest,mode = c("walking"),structure = c("legs")) 
    c<- geom_leg(aes(x = startLon, y = startLat, xend = endLon, yend = endLat), 
     alpha = 2/4, size = 2, data = r, colour = 'blue') 

    return (c) 
} 

a<-qmap('Chester, UK', zoom = 15, maptype = 'road') 

for (n in 1:3){ 
    #l<-leg(start[n], dest[n]) 
    l<-leg(as.character(df[n,1]), as.character(df[n,2])) 

    a<-a+l 
} 

a 
관련 문제