Я пытаюсь имитировать c или выяснить, как работает функция, подобная leafletProxy, в пакете mapview внутри приложения Shiny (flexdashboard). Идея состоит в том, что у меня есть запрос к параметризованной базе данных, который выбирает набор данных sf (~ 4200 полигонов) на основе пользовательских данных, а затем составляет графики в виде карты. Однако, похоже, что каждый раз, когда это делается, карта вся перерисовывается?
Ниже приведен воспроизводимый пример использования набора данных по франконии по умолчанию и блестящего ввода для управления непрозрачностью линии. Я также включил свой код (закомментированный), чтобы показать пример того, как он будет использоваться по назначению (т.е. динамически перерисовывать слой многоугольника на основе выборки из базы данных)
Есть ли способ в блестящем нарисовать "базовая" карта всех стилей фоновых карт один раз, а затем только перерисовывает новые данные полигона по мере их получения?
Спасибо!
---
title: "MRE"
output:
flexdashboard::flex_dashboard:
orientation: columns
vertical_layout: fill
runtime: shiny
---
```{r setup, include=FALSE}
library(flexdashboard)
library(mapview)
library(shiny)
library(leaflet)
#library(RSQLite)
#library(sf)
```
Sidebar {.sidebar}
-----------------------------------------------------------------------
```{r}
# This is shiny input that will trigger entire map redraw
sliderInput("gridlines", "Grid Line Opacity", 0, 1, 0, step = 0.1, ticks = FALSE)
```
```{r}
### THIS IS MY ACTUAL CODE...For reference
# sp_grid <- reactive({
# db <- "../data/modeldata.db"
# con <- dbConnect(SQLite(), db )
#
# # set the sql based on user input
# sql <- 'SELECT id, Time,Cell_I, Cell_J, Cell_K, Cell_Botdepth_M, Zmax, Salinity, WKT_GEOMETRY
# FROM vwGridTK
# WHERE Time = :time
# AND Cell_K = :layer'
#
# df.grid <- dbGetQuery(con, sql, params = list(time = 0,
# layer = 1))
# dbDisconnect(con)
#
# st_as_sf(df.grid, wkt = "WKT_GEOMETRY") %>% st_set_crs(4326)
#
# })
```
Column {data-width=500}
-----------------------------------------------------------------------
### Reproducible Example
NOTE the shiny input to control opacity
```{r}
renderLeaflet({
m <- mapview(franconia, zcol = "district", alpha = input$gridlines)
m@map
})
```
Column {data-width=500}
-----------------------------------------------------------------------
### My Example
```{r}
# renderLeaflet({
# m <- mapview(sp_grid(), zcol = "Salinity",
# legend = TRUE, alpha = input$gridlines)
#
# m@map
#
# })
```