2017-03-05 2 views
3

Ich versuche shinydashboard mit leatlef zu verwenden. Nachdem ich diesen Beitrag on SO gelesen habe, habe ich mehrere Dinge ohne Erfolg versucht, entsprechende Informationen aus df per Mausklick Ereignis auf einem Marker in einer Broschüre Karte zu zeigen.

Beispieldaten:

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) 

Mein Code sieht so aus:

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

Ihr 'Klick' Ereignis verwenden ordnungsgemäß funktioniert (bitte einen 'print (klicken)' Anweisung innerhalb der 'observe') . Es sind deine Popups, die falsch sind. – SymbolixAU

+0

Hallo @SymbolixAU, danke für das Hinweis. Gibt es eine Möglichkeit, den Fehler zu zeigen, den ich begangen habe? –

Antwort

4

Ihr click Ereignis wie erwartet feuert, aber Sie müssen sich ändern, wie Sie es verwenden.

  1. Die lat/lon Werte in click$lat und click$lng
  2. Sie müssen gespeichert werden leafletProxy verwenden, um die Karte zu aktualisieren. Sie können nicht einfach das map Objekt
  3. wiederverwenden. Es gibt auch keine Funktion in der Broschüre showPopups. Sie müssen addPopups()

Ihre server wird in etwa so aussehen

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) 
Verwandte Themen