R: Shiny & Leaflet map: Подмножество с ползунком после выбора переменной для отображения на карте (полигоны) - PullRequest
0 голосов
/ 22 марта 2019

У меня есть CSV и шейп-файл с районами и многими социально-демографическими переменными (доход, население, цена за квадратный метр и уровень преступности). Я могу объединить их, и я могу выбрать, какую переменную я хочу видеть отображенной на листовой карте с выпадающим списком. Чем сильнее заполнение, тем выше значение. Эта часть проста. До сих пор работает следующий упрощенный код:

library(shiny)
library(shinydashboard)
library(leaflet)
library(rgdal)


#### LOAD DATA ####
CSVDataFrame<- read.csv("CSVDataFrame.csv")
shapeData <- readOGR("districts.shp")

CSVDataFrame <- merge(CSVDataFrame,shapeData, by=c("id"))

################ FUNCTION ################

DataType <- function(x) {
  switch(x,

         "Population" = CSVDataFrame$Population,
         "Income" = CSVDataFrame$Income,
         "Square Meter Price" = CSVDataFrame$SQMP,
         "Crime Rate" = CSVDataFrame$CrimeRate,     
  )
}

################ UI ################

ui <- dashboardPage(
  dashboardHeader(title = "Districts"),
  dashboardSidebar(
    sidebarMenu(

               selectInput("pType", "",
                            list("Population",
                                 "Income",
                                 "Square Meter Price",
                                 "Crime Rate",
                                      ))

      )),

  dashboardBody(
    tabBox(
      width = 12, title = tagList(shiny::icon("map"), "Created by me"),
      tabPanel("Districts viewer",
               tags$style(type = "text/css", "#map {height: calc(100vh - 80px) !important;}"),
               leafletOutput("map",height = "75vh"))
    )
  )
)

################ SERVER ################

server <- function(input, output) {

  output$map <- renderLeaflet({
    leaflet() %>%
      addProviderTiles(providers$CartoDB.Positron,
                       options = providerTileOptions(noWrap = TRUE)
      ) %>%
      setView(lng = -58.450034, lat = -34.599585, zoom = 12) %>%
      addPolygons(data= shapeData,weight=0,col = "Red", popup=paste(DataType(input$pType), sep=" <br>") ,
                  fillOpacity = (DataType(input$pType))/max(DataType(input$pType)))
  })

  leafletOutput('map', height=2000)

}

shinyApp(ui, server)

Это работает просто отлично. Теперь мне нужно добавить ползунок (sliderInput), способный помещать данные из входных данных MIN в MAX. Я опробовал некоторые коды, но я не знаю, как:

1) Сделайте значения MIN и MAX в обновлении sliderInput после того, как я выберу переменную в раскрывающемся списке (я могу сделать так, чтобы вход слайдера принял MIN и MAX для одной статической переменной, но это не то, что мне нужно)

2) Сделайте подмножество ползунка переменной, которую я сейчас вижу.

Помощь с благодарностью! Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...