R Листовка Shinyapp : Есть ли способ нарисовать полигоны, которые затем используются для создания нового растра и изменения карты?

#leaflet #raster #sf #shinyapps

Вопрос:

Я хочу, чтобы пользователи могли создавать кучу полигонов на карте, а затем использовать эти полигоны для создания нового растра, а затем изменять карту. Пока я могу просто загрузить свою карту, отобразить ее, затем пользователь может создавать полигоны, и я могу сохранить их на диск. Однако я понятия не имею, как перенести эти новые фигуры, чтобы затем создать новый растр, который я хочу затем построить. Приведенный ниже код не работает, но, надеюсь, кто-то сделал что-то подобное, чтобы указать мне правильное направление. Спасибо

 library(shiny)
library(raster)
library(leaflet)
library(leaflet.extras)
library(sf)


World_bio <- getData('worldclim', var='bio', res=10)
myraster <- projectRaster(World_bio$bio1,crs = CRS(" init=epsg:3857"))

ui <- bootstrapPage(
  leafletOutput("mymap"),
  absolutePanel(top = 10, right = 10, width = 300,
                style = "padding: 8px",
                actionButton("printShapes", h5(strong("Generate New Map"))))
)


server <- function(input, output, session) {
  
  output$mymap <- renderLeaflet({
    
    map <- leaflet() %>%
      addTiles() %>%
      addDrawToolbar(polylineOptions = F,
                     markerOptions = F,
                     circleMarkerOptions = F,
                     targetGroup = "draw",
                     editOptions = editToolbarOptions(edit=TRUE)) %>%
      addRasterImage(myraster,project = F,
                     opacity = 0.3,group = "myraster")
    map
  })
  
  # Capture user generated polygons
  observeEvent(input$printShapes, {
    
    # Get polys
    polys <- input$mymap_draw_all_features  
    
    # Turn them into sf polygons
    polys <- lapply(polys$features,FUN = function(X){
      coords <- matrix(unlist(X$geometry$coordinates),ncol = 2,byrow = T)
      poly <- st_polygon(list(coords))
      poly
    })
    
    # Modify the raster using these polygons, the raster doesn't exist here
    new_raster <- myraster
    for(i in 1:length(polys)){
      new_raster[cellFromPolygon(object = new_raster,polys[[i]])] <- 0 # Turn to 0
    }
    
    # Save the raster since I don't know how to send it over
    writeRaster(new_raster,"new_raster")
    
  })
  
  # Modify the map, remove the previous raster and load the new one
  observe({
    # Load new rasters
    new_raster <- raster("new_raster")
    
    leafletProxy("mymap") %>%
      clearImages() # Remove the rasters %>%
    addRasterImage(new_raster,project = F,
                   opacity = 0.3,group = "XGB") %>% 
      leaflet::addLegend(pal = pal,values = seq(0,1,0.1),title = "Use") %>%
      addRasterImage(keras_after,project = F,
                     colors = pal,
                     opacity = 0.3,group = "myraster")
  })
}

# Run the application, doesn't work since 
shinyApp(ui = ui, server = server)