Hello i created a simple shiny app in which i display a leaflet map. I have created a select input from which the user can select a "pollutant"(pm25 etc). Based on this choice i want in the map only the "location" that this pollutant exists. This depends on the TRUE-FALSE choises in the df dataframe. So when the uses chooses a pollutant the map will show the locations and a pop up message with location, pollutant name(pm25 for example) and firstUpdated, lastUpdated.
location = c("100 ail", "16th", "21 de Mayo")
lastUpdated = c("aa", "bb", "cc")
firstUpdated = c("2015-09-01 00:00:00","2016-03-06 19:00:00","2016-03-06 19:00:00")
lastUpdated = c("2018-02-01 09:30:00","2018-02-01 03:00:00","2017-01-13 15:00:00")
latitude=as.numeric(c("47.932907","41.322470","36.809700"))
longitude=as.numeric(c("106.92139000","-95.93799000","-107.65170000"))
pm25=c("TRUE","FALSE","TRUE")
pm10=c("FALSE","FALSE","TRUE")
no2=c("TRUE","FALSE","TRUE")
df = data.frame(location,lastUpdated,firstUpdated,latitude,longitude,pm25,pm10,no2)
#ui.r
library(shiny)
library(leaflet)
library(shinythemes)
library(dplyr)
library(gissr)
# Define UI for application that draws a histogram
shinyUI(fluidPage(theme = shinytheme("slate"),
# title
titlePanel("Select Dates of interest and location"),
# first row; This allows a user to enter their start and stop dates
fluidRow(
column(6, wellPanel(
dateRangeInput('dateRange',
label = 'Date range input: yyyy-mm-dd',
start = df$firstUpdated, end = df$lastUpdated
),
helpText("Choose an end date. It is best to choose an end data that is at least 30 days later than your start date")
)
),
column(
width = 6,
leafletOutput("map")
)
),
# second row; this reports user selections of dates, pollutants, and location to be (eventually) passed to OpenAQ to retrieve data.
fluidRow(
tabsetPanel(
type = "tabs",
# summary tab
tabPanel(
" Select Dates and Location",
verbatimTextOutput("dateRangeText"),
fluidRow(
)
),
# Pollutant Selection tab
tabPanel(
"Select your Pollutant",
selectInput("pollutant", label = h4("Choose Pollutant"),
choices = list("PM10" = "PM10", "PM2.5" = "PM2.5","no2"="no2"),
selected = 1),
helpText("While all pollutants are listed here, not all pollutants are measured at all locations and all times.
Results may not be available; this will be corrected in further revisions of the app. Please refer to the measurement availability
in the 'popup' on the map."),
hr(),
fluidRow(column(3, uiOutput("pollutant")))
),
# scenario tab. Needs work. Panel should include a summary of user choices (selected on previous panels) and then
# allow a user to enter their email address. An action button would be pressed to create the output from OpenAir.
tabPanel(
"Selection Summary and Process Data",
fluidRow(
# actionButton("goButton", "OpenAir Local!"),
# helpText("When you click the button above, you should see",
# "the output below update to reflect the value you",
# "entered at the top:"),
)
)
)
)
)
)
#server.r
# server.R for emission dashboard
shinyServer(function(input, output, session) {
# date output -- reports user-selected state & stop dates in UI
output$dateRangeText <- renderText({
paste("Date Range is:",
paste(as.character(input$dateRange), collapse = " to ")
)
})
#Stores the value of the pollutant selection to pass to openAQ request
output$pollutant <- renderText({
paste("Selected pollutant is", as.character(input$pollutant))
})
###################################
#output$OALpollutant <- renderUI({OALpollutant})
##################################
# create the map, using dataframe 'locations' which is polled daily (using ropenaq)
#MOD TO CONSIDER: addd all available measurements to the popup - true/false for each pollutant, and dates of operation.
output$map <- renderLeaflet({
df %>%
select(location, latitude, longitude) %>%
distinct() %>%
sp_from_data_frame(type = "points") %>%
leaflet_plot(popup = "location",
colour = "purple")
})
#Process Tab
OAL_site <- reactive({
req(input$map_marker_click)
location %>%
filter(latitude == input$map_marker_click$lat,
longitude == input$map_marker_click$lng)
})
})