我正在尝试将shinydashboard
与leatlef
一起使用。阅读完这篇文章on SO后,我尝试了几项没有成功的事情,通过鼠标点击事件在传单地图中的标记上显示来自df
的相应信息。
示例数据:
latitude<-c(35.94077, 35.83770, 35.84545, 35.81584, 35.79387, 36.05600)
longitude<-c(-78.58010, -78.78084, -78.72444, -78.62568, -78.64262,-78.67600)
amounts1<-c(27, 44, 34, 46, 25, 15)
amounts2<-c(34, 52, 35, 78, 14, 24)
ids<-c("a", "b", "c", "d", "e", "f")
df<-data.frame(ids,amounts1,amounts2,latitude,longitude)
我的代码如下:
library(shiny)
library(shinydashboard)
library(leaflet)
ui = dashboardPage(
dashboardHeader(title = "Testing leatlef"),
dashboardSidebar(
sidebarMenu(menuItem(
"Dashboard",
tabName = "dashboard",
icon = icon("dashboard")
))
),
dashboardBody(
tags$script(HTML("addClass(‘sidebar-mini’);")),
tags$head(
tags$link(rel = "stylesheet", type = "text/css", href = "style.css")
),
tags$style(type = "text/css", "#map {height: calc(100vh - 80px) !important;}"),
fluidRow(column(width = 12,
leafletOutput('map', height = 550))),
fluidRow(verbatimTextOutput("Click_text"))
)
)
################################################################################
# Server
################################################################################
server = function(input, output, session) {
map = createLeafletMap(session, 'map')
session$onFlushed(once = T, function() {
output$map <- renderLeaflet({
leaflet(df) %>%
addMarkers( ~ longitude,
~ latitude)
})
})
observe({
click <- input$map_marker_click
if (is.null(click))
return()
text <-
paste("Lattitude ",
click$latitude,
"Longtitude ",
click$longtitude)
map$clearPopups()
map$showPopup(click$latitude, click$longtitude, text)
})
}
################################################################################
# run app
shinyApp(ui, server)
答案 0 :(得分:5)
您的click
事件按预期触发,但您需要更改使用方式。
click$lat
和click$lng
leafletProxy
来更新地图。您不能只重复使用map
对象showPopups
的传单中也没有任何功能。您需要使用addPopups()
您的server
看起来像
server = function(input, output, session) {
latitude<-c(35.94077, 35.83770, 35.84545, 35.81584, 35.79387, 36.05600)
longitude<-c(-78.58010, -78.78084, -78.72444, -78.62568, -78.64262,-78.67600)
amounts1<-c(27, 44, 34, 46, 25, 15)
amounts2<-c(34, 52, 35, 78, 14, 24)
ids<-c("a", "b", "c", "d", "e", "f")
df<-data.frame(ids,amounts1,amounts2,latitude,longitude)
map = createLeafletMap(session, 'map')
session$onFlushed(once = T, function() {
output$map <- renderLeaflet({
leaflet(df) %>%
addMarkers( ~ longitude,~ latitude)
})
})
observe({
click <- input$map_marker_click
if (is.null(click))
return()
print(click)
text <-
paste("Lattitude ",
click$lat,
"Longtitude ",
click$lng)
leafletProxy(mapId = "map") %>%
clearPopups() %>%
addPopups(dat = click, lat = ~lat, lng = ~lng, popup = text)
# map$clearPopups()
# map$showPopup(click$latitude, click$longtitude, text)
})
}
shinyApp(ui, server)