0

我对 R Shiny 有点陌生,我正在尝试制作一个简单的动态网络地图,普通用户可以在其中找到肯塔基州东部回收各种材料的地方。在 UI 的侧边栏面板中,我创建了一个复选框组,因此用户可以过滤允许回收他们选择的材料的回收中心(在这种情况下,哪个中心回收玻璃和/或铝和/或塑料)。运行应用程序时会显示该复选框,但我会在地图应位于的位置看到一个空白仪表板。当我尝试在 observeEvent() 函数中制作代理地图时,应用程序的服务器端出现了问题,但我对自己做错的事情感到困惑。

这是我的数据的链接,名为 RE.csv: https ://github.com/mallen011/Leaflet_and_Shiny/blob/master/Shiny%20Leaflet%20Map/csv/RE.csv

这是完整的原始 Shiny 应用程序代码: https ://github.com/mallen011/Leaflet_and_Shiny/blob/master/Shiny%20Leaflet%20Map/app.R

这是数据,在 R 中读取:

RE <- read.csv("C:/Users/username/Desktop/GIS/Shiny Leaflet Map/csv/RE.csv")
RE$y <- as.numeric(RE$y)
RE$x <- as.numeric(RE$x)
RE.SP <- SpatialPointsDataFrame(RE[,c(7,8)], RE[,-c(7,8)])
RE$popup <- paste("<p><h2>", RE$name,"</p></h2>",
              "<p>", RE$sector,"</p>",
              "<p>", RE$address,"</p>",
              "<p>", RE$phone,"</p>")

这是 UI(dashboardSidebar 是 checkboxGroup input() 所在的位置):

ui <- dashboardPage(
 dashboardHeader(),
 dashboardSidebar(checkboxGroupInput(inputId = "RE_check", 
                                 label = h3("Recycleables"), 
                                 choices = list("Glass" = RE$GL, "Aluminum" = RE$AL, "Plastic" = RE$PL),
                                 selected = 0)
                                  ),
  dashboardBody(
       fluidRow(box(width = 12, leafletOutput(outputId = "map"))),
       leafletOutput("map")
      )
       )

这是服务器:

server <- function(session, input, output) {
  output$map <- renderLeaflet({
                leaflet() %>% 
            addMarkers(data = RE,
                       lng = ~x, lat = ~y, 
                       label = l apply(RE$popup, HTML),
                       group = "recycle") %>% 

})

这是我在 server.r 端遇到问题的部分。我不确定我做错了什么,但我知道我的 observeEvent() 有问题。我想要完成的是一个观察事件,如果用户在复选框组中选中玻璃,那么每个回收玻璃值为“yes”的回收中心都会弹出。只是对如何获得这个结果有一个大脑放屁。

observeEvent({
RE_click <- input$map_marker_click
if (is.null(RE_click))
  return()

if(input$RE_check == "Glass"){
  leafletProxy("map") %>% 
    clearMarkers() %>% 
    addMarkers(data = RE_click,
               lat = RE$y,
               lng = RE$x,
               popup = RE$popup)
}

}) }

shinyApp(ui = ui, server = server)

我确信我的困境的答案比我想象的要简单得多,但我会很感激任何/所有的帮助。在外面保持安全!谢谢

4

0 回答 0