2016-08-13 6 views
0

私は光沢があり、リーフレットを新しくしています。以下のコードは、ベースマップ上にポイントをマップする試みです。それはうまくいくが、反応的ではない。
ポイントは、(CSVからインポートされた)データフレームから取得したもので、マップすることができます。しかし、アプリケーションの上部には、ユーザーが機能を選択できるようにするチェックボックスが作成されています。アイデアは、どの行が順方向に渡されるか、したがってどの点がマップされるかを選択することになります。これは私が苦労しているステップです。コードでは、フィルタリングの出力(チェックボックス入力)からではなく、データフレームから可能なポイントの完全なリストを渡しています。代わりにフィルター処理の結果をどうやって渡すのですか?checkboxGroupInputの後の反応的なマッピング

私のアプローチは、cbind()のデータフレームを作成するために、座標を持つcolを取得し、これをpointsに渡します。おそらく、フィルタリングされたデータから関連する列を直接渡すことができます。ありがとうございました。

library(shiny) 
library(leaflet) 
library(dplyr) 


parks <- read.csv("data.csv") 

r_colors <- rgb(t(col2rgb(colors())/255)) 
names(r_colors) <- colors() 

ui <- fluidPage(
    # First row for selectInputs 
    fluidRow(
    column(4, 
      checkboxGroupInput(inputId = "d_Governorate", 
           label = "Governorate:", 
           choices = c("All", 
              unique(as.character(parks$Governorate))), 
           selected = "All" 
          ) 
    ), 

    leafletOutput("d_map") 
) 
) 



server <- function(input, output, session) { 

    points <- reactive({ 
    validate(
     need(input$d_Governorate != "", 'Please choose at least one feature.') 
    ) 
    temp <- select(parks, lon, lat) 
    if (input$d_Governorate != "All") { 
     temp <- filter(parks, Governorate %in% input$d_Governorate) %>% 
     select(lon, lat) 
    } 
    temp 
    }), 

    output$d_map <- renderLeaflet({ 
    leaflet() %>% 
     addProviderTiles("Stamen.TonerLite", 
         options = providerTileOptions(noWrap = TRUE) 
    ) %>% 
     addMarkers(data = points()) 
    }) 
} 

shinyApp(ui, server) 

DATA:UIで

 points <- reactive({ 
      validate(
        need(input$d_Governorate != "", 'Please choose at least one feature.') 
      ) 
      temp <- select(parks, lon, lat) 
      if (input$d_Governorate != "All") { 
        temp <- filter(parks, Governorate %in% input$d_Governorate) %>% 
          select(lon, lat) 
      } 
      temp 
    }) 

https://www.dropbox.com/s/3nq07fbyurur8ec/data.csv?dl=0

答えて

1

私は、次のコード(コードがdplyrパッケージを使用しています)とポイント反応変数を定義する部分を変更します一部を追加:

selected = "All" 

ckboxGroupInputの定義。

+1

私のラップトップでコードに投稿できますか? –

+0

ありがとう@Valter。私が提案したコードを追加しました。何が働いているかは、すべてのユーザー入力をリフレッシュすることです。しかし、それは常にすべての点をマップします。つまり、フィルタリングは機能していません。私はtempをポイントに渡そうとしました: 'points < - temp'、あなたの最後のステートメント' temp'を置き換えましたが、無駄です。 – jpinelo

+0

@jpinelo私はコードをチェックして、それはうまく見えます。私はここにアプリを配備しました:[app](https://altervalter.shinyapps.io/q11app/)マップの下にある表を見て、地図上のどの点がマークされているかを確認してください。 –

関連する問題