如何正确实现输入$ map_marker_click?

4 r shiny

我试着shinydashboardleatlef.在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)
Run Code Online (Sandbox Code Playgroud)

我的代码看起来像:

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)
Run Code Online (Sandbox Code Playgroud)

Sym*_*xAU 7

您的click活动按预期启动,但您需要更改使用方式.

  1. lat/lon值存储在click$lat和中click$lng
  2. 您需要使用leafletProxy更新地图.您不能只重复使用该map对象
  3. 传单中也没有任何功能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)
Run Code Online (Sandbox Code Playgroud)