2017-06-14 14 views
0

リーフレットを使用して線をプロットしようとしていますが、セグメントを分割する際にいくつかの問題が発生しています。私は、このファイルには、例として2件の旅行(そこに多くの人がより多くのですが、それだけでアイデアを与えることです)、理想的にポイント9番(第一旅の終わり)を表し リーフレットの別の行

> head(trips, n=15) 
    time.start time.end long.start long.end lat.start lat.end distance time.diff  speed color 
1 1476450598 1476450713 9.03913 9.03924 45.61335 45.61362 31.25292  115 0.9783524 green 
2 1476450713 1476450727 9.03924 9.03995 45.61362 45.61365 55.38651  14 14.2422459 green 
3 1476450727 1476450751 9.03995 9.04005 45.61365 45.61340 28.89870  24 4.3348057 green 
4 1476450751 1476450777 9.04005 9.04017 45.61340 45.61406 74.06267  26 10.2548313 green 
5 1476450777 1476450873 9.04017 9.03949 45.61406 45.61419 54.89125  96 2.0584219 green 
6 1476450873 1476450920 9.03949 9.03496 45.61419 45.61319 369.88687  47 28.3317600 green 
7 1476450920 1476450930 9.03496 9.03440 45.61319 45.61295 51.13973  10 18.4103034 green 
8 1476450930 1476450932 9.03440 9.03448 45.61295 45.61285 12.75643   2 22.9615714 green 
9 1476450932 1476450982 9.03448 9.03495 45.61285 45.61241 61.14351  50 4.4023330 green 
10 1476451362 1476451363 9.03553 9.03559 45.61197 45.61188 11.05462   1 39.7966396 green 
11 1476451363 1476451373 9.03559 9.03606 45.61188 45.61129 75.18742  10 27.0674701 green 
12 1476451373 1476451382 9.03606 9.03712 45.61129 45.61127 82.57276   9 33.0291031 green 
13 1476451382 1476451405 9.03712 9.04059 45.61127 45.61095 272.54942  23 42.6599094 green 
14 1476451405 1476451412 9.04059 9.04115 45.61095 45.61091 43.83450   7 22.5434586 green 
15 1476451412 1476451431 9.04115 9.04440 45.61091 45.61064 254.85994  19 48.2892512 green 

次のようになりますオブジェクトを持っていますポイント10にリンクしてはいけません(2回目のトリップの開始)。私は、これは、このコード mapImageData

ggmap(mapImageData)+ 
    geom_segment(data=trips, mapping=aes(y=trips$lat.start, x=trips$long.start, 
             yend=trips$lat.end, xend=trips$long.end),color=trips$color,size=1) 

は、リーフレットのタイルに相当し、その後、私は、各点の最初と最後の位置を指定して、コマンドgeom_segmentでポイントを追加していますコマンドを使用して行われました。

リーフレットでは、コマンドaddPolylines(data = mydata, lng = ~long, lat = ~lat, weight=1,color="purple")を使用する必要があります。違いは、このコマンドは、緯度と経度の列の列を望んでいることで、この

head(mydata, n=15) 
     lat long 
1 45.61335 9.03913 
2 45.61362 9.03924 
3 45.61365 9.03995 
4 45.61340 9.04005 
5 45.61406 9.04017 
6 45.61419 9.03949 
7 45.61319 9.03496 
8 45.61295 9.03440 
9 45.61285 9.03448 
10 45.61197 9.03553 
11 45.61188 9.03559 
12 45.61129 9.03606 
13 45.61127 9.03712 
14 45.61095 9.04059 
15 45.61091 9.04115 

このように私の例の何かでは、しかし、ドットを接続しないとき、私が言うことができるか、すべてのポイントを接続しますか?例えば位置番号。 9と10は互いにリンクしてはいけません。 ありがとう、 Marco

+0

をあなたは、データを溶融し、行名を維持することができます。 'group'引数(行の名前はグループ化されます)を使って開始と終了を指定します。 – troh

答えて

1

まず、さまざまな旅行を区別する方法が必要です。
私はあなたが言ったことに基づいて

df$group <- c(rep(1, 9), rep(2, 6)) 

を使用し、それはスーツとしてあなたdfを変更します。これは非常に高速であるfor loopにもかかわらず

enter image description here

m <- leaflet(df) %>% 
    addTiles() 

for (i in unique(df$group)) { 
    m <- m %>% 
     addPolylines(data = df[df$group == i, ], 
        lng = ~long.start, 
        lat = ~lat.start) 
} 

結果:私たちは、グループごとにポリラインを追加しようとしている。この後

。我々はlapplyを使用することができ、ノッチそれをスピードアップするには:

m <- leaflet(df) %>% 
     addTiles() 

lapply(unique(df$group), 
     function(x) { 
      addPolylines(m, 
         data = df[df$group == x, ], 
         lng = ~long.start, 
         lat = ~ lat.start) 
     }) 
rbenchmark::benchmark(
    apply = { 

     m <- leaflet(df) %>% 
      addTiles() 

     lapply(unique(df$group), function(x) { 
      addPolylines(m, 
         data = df[df$group == x, ], 
         lng = ~long.start, 
         lat = ~ lat.start) 
     }) 
    }, 
    forcycle = { 

     m <- leaflet(df) %>% 
      addTiles() 

     for (i in unique(df$group)) { 
      addPolylines(m, 
         data = df[df$group == i, ], 
         lng = ~long.start, 
         lat = ~lat.start) 
     }}, 
    replications = 1000) 
#>  test replications elapsed relative user.self sys.self user.child 
#> 1 apply   1000 2.91 1.000  2.92  0   NA 
#> 2 forcycle   1000 3.04 1.045  3.00  0   NA 
+0

ご協力いただきありがとうございます。これは完全に問題なく、サイクルのない場合と同じ結果を再現する方法はありますか?ggmapがどのように行うのか?私はこれを頼んでいるのは、多くの反復がある場合、サイクルのために通常は本当に遅いためです。もう一度ありがとうございました –

+0

ベンチマークで更新 – GGamba

関連する問題