1
votes

I am trying to construct a map with leaflet using shiny however my code does not change the leaflet map according to the selected input. Does anyone know how to make this code below react to do the select input? I tried to do it with get function but could not succeed. Any help would be much appreciated!

Here is my data:

> datamap
         Country.code EVENTONE EVENTTWO EVENTTHREE
1  Bosnia and Herzegovina       11        1          5
2             South Korea        1        4          4
3             Philippines        1        5          6
4               Indonesia        1        6          8
5                Thailand        1        0          9
6                Mongolia        1        0          3
7      Russian Federation        1        0          4
8                 Ukraine        1        0          8
9                Slovenia        1        0          5
10               Mongolia        1        0          0
11               Pakistan        1        0          0
12             Bangladesh        1        0          0

And here is my code:

library(shiny)
library(rworldmap) 
library(ggplot2)



shinyUI(fluidPage( 
  fluidRow(h1("Events in the World", align = "center")),
  fluidRow(
    column(2,

       selectInput("var", "Choose the Type Event:",
                   choices=c("Event One" = "EVENTONE", 
                             "Event Two" = "EVETNTWO", 
                             "Event Three" = "EVENTTHREE"))

),

column(10,

       tabsetPanel(
         tabPanel("Map View", leafletOutput("TheMap", width = "100%")
         )

       ) #end tabset panel
    )
  ) 
))

shinyServer(function(input, output) {

  datamap <- read.csv(".../Documents/R Directory/App-4/mapexcel4CSV.csv",             
                  stringsAsFactors=FALSE, header=TRUE)
  sPDF <- joinCountryData2Map(datamap, joinCode='NAME',       
                          nameJoinColumn='Country.code')
  sPDF <- sPDF[sPDF$ADMIN!='Antarctica',]

  output$TheMap <- renderLeaflet({
  mapselect <- get(input$var)
  pal <- colorBin("YlOrRd", domain = mapselect) 
  labels <- sprintf(
    "<strong>%s</strong><br/>Number of events: %g</sup>",
    sPDF$NAME, sPDF$mapselect
  ) %>% lapply(htmltools::HTML)

  TheMap<- leaflet(data = sPDF) %>% addTiles() %>% addPolygons(stroke = FALSE) %>% addPolygons(
  fillColor = ~pal(mapselect),
  weight = 2,
  opacity = 1,
  color = "white",
  dashArray = "3",
  fillOpacity = 0.7,
  highlight = highlightOptions(
    weight = 5,
    color = "#666",
    dashArray = "",
    fillOpacity = 0.7,
    bringToFront = TRUE),
  label = labels,
  labelOptions = labelOptions(
    style = list("font-weight" = "normal", padding = "3px 8px"),
    textsize = "15px",
    direction = "auto"))
  }
  )  
})
shinyApp(ui = ui, server = server)

Any help is greatly appreciated!

1

1 Answers

1
votes

I guess this is what you are aiming for:

library(shiny)
  library(rworldmap) 
  library(ggplot2)
  library(leaflet)



 ui <-  shinyUI(fluidPage( 
    fluidRow(h1("Events in the World", align = "center")),
    fluidRow(
      column(2,

             selectInput("var", "Choose the Type Event:",
                         choices=c("Event One" = "EVENTONE", 
                                   "Event Two" = "EVENTTWO", 
                                   "Event Three" = "EVENTTHREE"))

      ),

      column(10,

             tabsetPanel(
               tabPanel("Map View", leafletOutput("TheMap", width = "100%")
               )

             ) #end tabset panel
      )
    ) 
  ))

  server <- shinyServer(function(input, output) {

    datamap <- read.csv("E:/test.csv",             
                        stringsAsFactors=FALSE, header=TRUE)
    sPDF <- joinCountryData2Map(datamap, joinCode='NAME',       
                                nameJoinColumn='Country.code')
    sPDF <- sPDF[sPDF$ADMIN!='Antarctica',]
    legVal <-  c(min(datamap[,-1]), max(datamap[,-1]) )
    output$TheMap <- renderLeaflet({
      mapselect <- input$var
      pal <- colorBin("YlOrRd", domain = as.numeric(sPDF[[mapselect]]))
      labels <- sprintf(
        "<strong>%s</strong><br/>Number of events: %g</sup>",
        sPDF$NAME, sPDF[[mapselect]]
      ) %>% lapply(htmltools::HTML)

      TheMap<- leaflet(data = sPDF) %>% addTiles() %>% addPolygons(stroke = FALSE) %>% addPolygons(
        fillColor = ~pal(as.numeric(sPDF[[mapselect]])),
        weight = 2,
        opacity = 1,
        color = "white",
        dashArray = "3",
        fillOpacity = 0.7,
        highlight = highlightOptions(
          weight = 5,
          color = "#666",
          dashArray = "",
          fillOpacity = 0.7,
          bringToFront = TRUE),
        label = labels,
        labelOptions = labelOptions(
          style = list("font-weight" = "normal", padding = "3px 8px"),
          textsize = "15px",
          direction = "auto"))%>% addLegend("bottomleft", pal = pal, value = legVal)
    }
    )  
  })
  shinyApp(ui = ui, server = server)

Hope it helps!