2016-11-16 6 views
0

リーフレットを使用するときに、overlayGroupを使用してマップ上に非表示または表示するレイヤーを制御する方法を示す例があります。しかし、レイヤーを隠すように設定しても、シェイプファイルをロードして追加する必要があります。私はかなり大きいシェイプファイルを持っているので、そのグループをクリックした場合にだけ追加するようにしたい。これを実行している場合たとえば、次の例を考え、リーフレット/光沢のあるグループをクリックしたときにポリゴンを追加する方法

library(shiny) 

ui <- fluidPage(leafletOutput("map")) 

server <- function(input, output) { 

outline <- quakes[chull(quakes$long, quakes$lat),] 

output$map <- renderLeaflet({ 
leaflet(quakes) %>% 
# Base groups 
addTiles(group = "OSM (default)") %>% 
addProviderTiles("Stamen.Toner", group = "Toner") %>% 
addProviderTiles("Stamen.TonerLite", group = "Toner Lite") %>% 

# Overlay groups 
addCircles(~long, ~lat, ~10^mag/5, stroke = F, group = "Quakes") %>% 
addPolygons(data = outline, lng = ~long, lat = ~lat, 
      fill = F, weight = 2, color = "#FFFFCC", group = "Outline") %>% 
hideGroup("Outline") %>% 
hideGroup("Quakes") %>% 
# Layers control 
addLayersControl(
    baseGroups = c("OSM (default)", "Toner", "Toner Lite"), 
    overlayGroups = c("Quakes", "Outline"), 
    options = layersControlOptions(collapsed = FALSE)) 
}) 
} 

shinyApp(ui = ui, server = server) 

、それは「マップ」してから私の理解にそれらを非表示にするには、すべてのレイヤーを追加します。私はこの外にaddPolygonsを移動する方法を知りたいので、layercontrolの "Outline"をクリックすると反応します。

答えて

1

あなたはこのようにそれを行うことができます:私はより具体的なされている必要があります

ui <- fluidPage(checkboxInput('outline', "Outline"), leafletOutput("map")) 

server <- function(input, output) { 

    outline <- quakes[chull(quakes$long, quakes$lat),] 

    output$map <- renderLeaflet({ 
    leafletplot <- leaflet(quakes) %>% 
     # Base groups 
     addTiles(group = "OSM (default)") %>% 
     addProviderTiles("Stamen.Toner", group = "Toner") %>% 
     addProviderTiles("Stamen.TonerLite", group = "Toner Lite") %>% 
     addCircles(~long, ~lat, ~10^mag/5, stroke = F, group = "Quakes") 


    if(input$outline) 
     leafletplot <- leafletplot %>% addPolygons(data = outline, lng = ~long, lat = ~lat, 
        fill = F, weight = 2, color = "#FFFFCC", group = "Outline") 

    leafletplot %>% hideGroup("Quakes") %>% 
     # Layers control 
     addLayersControl(
     baseGroups = c("OSM (default)", "Toner", "Toner Lite"), 
     overlayGroups = c("Quakes"), 
     options = layersControlOptions(collapsed = FALSE)) 
    }) 
} 

shinyApp(ui = ui, server = server) 
+0

。私はチェックボックスを使用したくない、私はoverlayGroupsのボックスをチェックすることでそれを制御できる方法があるかどうか疑問に思っていた。 – newbie

+0

あなたのソリューションは間違いなく正しい方法です。 – HubertL

関連する問題