Подтвердить что ты не робот

Как получить Листовку для R использовать 100% Блестящей высоты приборной панели

Я создаю приложение панели "Блестящее", где тело панели мониторинга должно отображать некоторые карты. Пока нет проблем, чтобы карта расширялась по всей ширине тела, но она как-то не желала приспосабливаться к полной высоте. введите описание изображения здесь

Сама листовка уже установлена, чтобы покрыть 100% высоты, но это не делает трюк. Как только я использую атрибут height для leafletOutput, объект листовки вообще не будет отображаться, и я остаюсь с пустым полем.

Код можно найти ниже:

library(shinydashboard)
library(leaflet)

ui <- dashboardPage(
  dashboardHeader(title = "Basic dashboard"),
  dashboardSidebar(
    sidebarMenu(
      menuItem(
        "Maps", 
        tabName = "maps", 
        icon = icon("globe"),
        menuSubItem("Watersheds", tabName = "m_water", icon = icon("map")),
        menuSubItem("Population", tabName = "m_pop", icon = icon("map"))
      ),
      menuItem(
        "Charts", 
        tabName = "charts", 
        icon = icon("bar-chart"),
        menuSubItem("Watersheds", tabName = "c_water", icon = icon("area-chart")),
        menuSubItem("Population", tabName = "c_pop", icon = icon("area-chart"))
      )
    )
  ),
  dashboardBody(
    tabItems(
      tabItem(
        tabName = "m_water",
        box(
          title = "Baltic catchment areas",
          collapsible = TRUE,
          width = "100%",
          height = "100%",
          leafletOutput("l_watershed")
        )
      ),
      tabItem(
        tabName = "m_pop",
        # Map in Dashboard
        leafletOutput("l_population")
      ),
      tabItem(
        tabName = "charts",
        h2("Second tab content")
      )
    )
  )
)

server <- function(input, output) {
  set.seed(122)
  histdata <- rnorm(500)

  output$l_watershed <- renderLeaflet({
    leaflet(height = "100%") %>% addTiles() %>% setView(19.08, 60.25, zoom = 4) %>%addWMSTiles(
      "http://62.236.121.188/arcgis/services/DataAndMaps/Background/MapServer/WMSServer?",
      layers = "11",
      options = WMSTileOptions(
        format = "image/png",
        transparent = TRUE
      ),
      attribution = "Catchment area provided by HELCOM"
    )
  })

  output$l_population <- renderLeaflet({
    leaflet(height = "100%") %>% addTiles() %>% setView(19.08, 60.25, zoom = 4) %>%addWMSTiles(
      "http://62.236.121.188/arcgis/services/DataAndMaps/Background/MapServer/WMSServer?",
      layers = "17",
      options = WMSTileOptions(
        format = "image/png",
        transparent = TRUE
      ),
      attribution = "Population data provided by HELCOM"
    )
  })
}

shinyApp(ui, server)
4b9b3361

Ответ 1

Я лично нашел, что установка высоты относительно размера окна более удовлетворительна. Высота в процентах не работает, потому что панель приборов имеет высоту undefined. Но относительно всего документа все в порядке.

100% dashoboardBody составляет 100vh (ccs3-unit) минус-заголовок (минимум 50px) минус панель DashboardBody (2 * 15px).

Итак, установите высоту в 100vh - 80px, и вы должны быть в порядке.

Так как shiny не поддерживает css3-единицы, это должно быть включено непосредственно в документ, как в приведенном ниже коде.

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

ui <- dashboardPage(
  dashboardHeader(),
  dashboardSidebar(),
  dashboardBody(
    tags$style(type = "text/css", "#map {height: calc(100vh - 80px) !important;}"),
    leafletOutput("map")
  )
)

server <- function(input, output) {
  output$map <- renderLeaflet({
    leaflet() %>% addTiles() %>% setView(42, 16, 4)
  })
}

runApp(shinyApp(ui, server), launch.browser = TRUE)

Удачи!

Ответ 2

Попробуйте вручную добавить размер пикселя:

...
  dashboardBody(
    tabItems(
      tabItem(
        tabName = "m_water",
        box(
          title = "Baltic catchment areas",
          collapsible = TRUE,
          width = "100%",
          height = "1000px",
          leafletOutput("l_watershed",width="100%",height="1000px")
        )
      ),
      tabItem(
        tabName = "m_pop",
        # Map in Dashboard
        leafletOutput("l_population",width="100%",height="1000px")
      ),
      tabItem(
        tabName = "charts",
        h2("Second tab content")
      )
    )
  )
...

Ответ 3

Блок

Th vh не работает для какого-либо старого мобильного браузера. Этот css ниже должен работать для компьютеров и мобильных устройств.

/* for computer */
div.outer {
     height: calc(100vh - 80px);
     padding: 0;
     margin: 0;
     min-height: 500px
}

@media all and (max-width:768px){
/* for mobile */
div.outer  {
  position: fixed;
  top: 70px;
  left: 0;
  right: 0;
  bottom: 0;
  overflow: hidden;
  padding: 0;
}
}

Ответ 4

Другим вариантом является jcheng5 и kent37 описаны на GitHub

output$mymap = renderLeaflet({...make a map...})
leafletOutput('mymap', height=1000)

Работает для меня с leaflet map в R flexdashboard