我想建立一个互动地图,让我可以使用R中的Shiny / Leaflet密切关注特定地区的设施
区域是用户输入(下拉框),如果用户检查框,则显示设施。所有这些都很好。
当我点击代表该设施的标记时,我希望Leaflet / Shiny绘制与设施相关的多边形。但似乎R甚至没有在input$map_marker_click
函数中注册我的observe
。
所以我的ui.r
代码:
shinyUI(fluidPage(
titlePanel(""),
sidebarLayout(position = "right",
sidebarPanel( selectInput("districtinput", "Select a district:",
list("Alfred Nzo")),
checkboxInput("addClinics", "Show Clinics", FALSE),
verbatimTextOutput("clickid",placeholder = TRUE)),
mainPanel(leafletOutput("mymap"))
)
)
)
和我的server.r
代码:
shinyServer(
function(input,output,session){
DMap<-reactive({
data <- PlotAN
if (input$districtinput=="Alfred Nzo"){data <- subset(PlotAN,"Alfred Nzo" %in% input$districtinput)}
return(data)
})
observe({
if (input$addClinics){
data<-clinics[clinics$district %in% input$districtinput]
leafletProxy("mymap") %>% addMarkers(lat=data$lat, lng=data$lon, popup = data$clinic)
}
if (!input$addClinics){
leafletProxy("mymap") %>% clearMarkers()
}
})
observe({
click<-input$map_marker_click
print(click)
if(!is.null(click$id)){
text<-paste(click$id,": ",click$lat,";",click$lng)
leafletProxy("mymap") %>% clearPopups() %>% showPopup(lat=click$lat,lng=click$lng,popup=text)
output$clickid<-renderText({text})
}
})
output$mymap <- renderLeaflet({
leaflet() %>%
addTiles() %>%
addPolylines(data=DMap(),color = "black", weight = 1, smoothFactor = 0.5,
opacity = 1.0,
highlightOptions = highlightOptions(color = "white", weight = 2,
bringToFront = TRUE))
})
}
)
现在我还没有将它链接到我想要显示的多边形数据,因为我想在确定如何使用它链接回多边形数据之前查看input$map_marker_click
返回的内容。但input$map_marker_click
甚至没有注册。
答案 0 :(得分:0)
您只需使用input$mymap_marker_click
即可。第一部分是mapId,而不仅仅是'map',因为你可以在一个应用程序中拥有多个地图。
此模式也适用于访问其他小部件上的事件,例如使用DT包创建的数据表。