我对 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)
我确信我的困境的答案比我想象的要简单得多,但我会很感激任何/所有的帮助。在外面保持安全!谢谢