Create an interactive web map with markers in R using Shiny, Leaflet and rCharts

I am trying to create an interactive web map in R to display storms using Shiny, Leaflet and rCharts (the structure is freely based on the http://ramnathv.imtqy.com/bikeshare application).

The idea is that the user selects one storm name at a time (df $ Name), and the markers for this storm (lat / long) are displayed on the sheet map (with zoom in / out function).

I cannot get Flyer to load a new map and markers for each individual storm name. Any help / advice would be greatly appreciated!

Here's what the data looks like (TCs.Rda) (sample data file downloaded here ):

Year Name Wind lat long 2010 BONNIE 15 30.100 -91.000 2010 FIVE 25 30.000 -88.900 2010 FIVE 25 30.400 -88.800 2010 FIVE 25 30.800 -88.600 

server.R

 library(shiny); library(rCharts); library(leaflet) load("TCs.Rda") name <- sort(unique(data$Name)) shinyServer(function(input, output){ dataset <- reactive({ df <- data[data$Name == input$name, ] }) output$add <- renderText({paste("Storm name:", input$name)}) output$Controls <- renderUI({ list(selectInput("name", "Select storm", name, selected=name[1])) }) output$myChart <- renderMap({ df <- dataset() map <- Leaflet$new() map$setView(c(35, -80),zoom=5) map$tileLayer(provider='Stamen.TonerLite') for (i in 1:nrow(df)) { map$marker(c(df[i, "lat"], df[i, "long"]), bindPopup=df[i, "Wind"])} map$set(dom='myChart') map$enablePopover(TRUE) map$fullScreen(TRUE) map }) }) 

ui.R

 library(shiny); library(rCharts); library(leaflet) shinyUI(pageWithSidebar( headerPanel("Storm tracks"), sidebarPanel(h3("My subtitle"), uiOutput("Controls")), mainPanel( tabsetPanel( h3(textOutput("add")), tabPanel("map", tags$style(".leaflet {height: 400px;}"), # I can only get this to work with a tabset panel, but ideally both the textOutput and map would go directly in the mainPanel showOutput("myChart", "leaflet"))) ) )) 
+6
source share
2 answers

I figured it out myself! Another message ( Brilliantly displays the recall of the rCharts booklet map once, but empty if you change the input variable ) indicates that the line of code "map $ set (dom = 'myChart')" may prevent Leaflet from reloading a new map for each choice.

I did not think that this could be a problem here (my example is slightly different and does not use geojson), but apparently it was.

This is my working code if it helps someone else -

server.R

 library(shiny);library(rCharts);library(leaflet) load("TCs.Rda") name <- sort(unique(data$Name)) shinyServer(function(input, output){ dataset <- reactive({df<- data[data$Name == input$name, ]}) output$add <- renderText({paste("Storm name:", input$name)}) output$Controls <- renderUI({list(selectInput("name", "Select storm", name, selected=name[1]) ) }) output$myChart <- renderMap({ df <- dataset() map <- Leaflet$new() map$setView(c(35, -80),zoom=3) map$tileLayer(provider='Stamen.TonerLite') for (i in 1:nrow(df)) {map$marker(c(df[i, "lat"], df[i, "long"]))} map$fullScreen(TRUE) map }) }) 

ui.R

 library(shiny); library(rCharts); library(leaflet) shinyUI(pageWithSidebar( headerPanel("Storm tracks"), sidebarPanel(h3("My subtitle"), uiOutput("Controls")), mainPanel( tabsetPanel( tabPanel("map", h3(textOutput("add")), tags$style(".leaflet {height: 400px;}"), showOutput("myChart", "leaflet"))) ) )) 

And the result will look like this:

enter image description here

+5
source

I highly recommend rstudio .

I have an introductory tutorial on this subject and why it is so amazing here: http://www.r-bloggers.com/the-leaflet-package-for-online-mapping-in-r/

In addition, I use it to create an interaction planning tool for DfT: https://github.com/npct/pct

Good luck to you!

+1
source

Source: https://habr.com/ru/post/986921/


All Articles