Обновлять внешний вид ссылки действия во всплывающем окне, когда условие имеет значение ИСТИНА в приложении Leaflet Shiny? - PullRequest
0 голосов
/ 28 января 2020

Я пытаюсь создать приложение Shiny с функцией листовки, полигонами с всплывающими окнами и отображением ссылок действий в этих всплывающих окнах.

Таким образом, ссылки действий должны появляться только во всплывающем окне, если указанное условие c выполняется при нажатии на многоугольник. Следовательно, каждый полигон будет иметь разные ссылки действий внутри своего всплывающего окна.

Я попытался добавить ссылку действия во всплывающее окно, и все прошло хорошо, но в каждом многоугольнике есть одинаковое количество ссылок действия, и этого не должно происходить. Я был бы очень признателен, если бы кто-нибудь мог помочь мне с тем, как написать условие и где поместить его в код, чтобы иметь настраиваемую ссылку действия во всплывающем окне для каждого многоугольника. Я прилагаю несколько примеров кода ниже.

Я благодарен за каждое предложение или совет.

library(shiny)
library(leaflet)

source("global.R")
ui<-navbarPage("App", id="nav",

               tabPanel("Polygons",

                        div(class="outer",

                            tags$head(
                              # Include our custom CSS
                              includeCSS("styles.css"),
                              includeScript("gomap.js"),
                              shinyjs::useShinyjs()
                            ),

                            leafletOutput("map", width="100%", height="100%" ),



                            conditionalPanel("false", icon("crosshair"))),

                        absolutePanel(id = "controls", class = "panel panel-default", fixed = TRUE,
                                      draggable = FALSE, top = 330, left = 10, 
                                      shinyjs::useShinyjs(),
                                      radioButtons("rdb",label = NULL, choices = c("Choice 1"="1", "Choice 2"="2", "Choice 3"="3"),selected = "")



               )))


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


  output$map <- renderLeaflet({

    leaflet(options = leafletOptions( zoomControl = TRUE )) %>%
      addTiles(group = "OSM (default)") %>%


      addPolygons(data =poly1,
                  weight=3, 
                  group = "Polygons1"
                  color= "red",
                  fillOpacity = 0)%>%


      addPolygons(data =poly2,
                  weight=1,
                  color= "black",
                  fillOpacity = 1,
                  fillColor ="pink", 
                  smoothFactor = 1,
                  group= "Polygons2",
                  label= ~NM2,
                  popup= ~popup1,
                  highlightOptions = highlightOptions(color = "white", weight = 2,
                                                      bringToFront = FALSE))%>%
      addPolygons(data =poly3,
                  weight=1,
                  color= "black",
                  fillOpacity = 1,
                  fillColor ="pink", 
                  smoothFactor = 1,
                  group= "Polygons3",
                  label= ~NM2,
                  popup= ~popup1,
                  highlightOptions = highlightOptions(color = "white", weight = 2,
                                                      bringToFront = FALSE))%>%

     addLayersControl(baseGroups=character(0),
                       overlayGroups =c( "Polygons2"),
                       options = layersControlOptions(collapsed=FALSE))%>%

      hideGroup( group= "Polygons2")

     })

popup1<- paste0("<b>Poly name: ",data1@data$exceltable_name, "</b>",
                  "<br>Count of people: ",data1@data$exceltable_count,
                  "<br>Count of cities: ",paste(x4),
                  "<br>Links", actionLink(inputId = "al1", label = "AL1", onclick = 'Shiny.setInputValue(\"link1\", this.id, {priority: \"event\"})'),", ",actionLink(inputId = "al2", label = "AL2", onclick = 'Shiny.setInputValue(\"link2\", this.id, {priority: \"event\"})'),", ",actionLink(inputId = "al3", label = "AL3", onclick = 'Shiny.setInputValue(\"link3\", this.id, {priority: \"event\"})'))

observeEvent(input$link1, {
    leafletProxy("map", data = poly1)  %>%
      showGroup( group = "Polygons1")
  })


  observeEvent(input$link2, {
    leafletProxy("map", data = poly2)  %>%
      showGroup( group = "Polygons2")
       })

  observeEvent(input$link3, {
    leafletProxy("map", data = poly3)  %>%
      showGroup( group = "Polygons3")
       })

  } 
# Run the application 
shinyApp(ui = ui, server = server) 

Итак, это код на данный момент, и он работает. Тем не менее, он по-прежнему показывает каждую ссылку действия во всплывающем окне. Как я могу изменить код, чтобы показывать только некоторые ссылки, связанные с некоторыми полигонами на основе условия?

Еще раз спасибо за каждое предложение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...