将栅格与 R 中的输入聚合

Aggregating a raster with an input in R

如何在 Shiny 中动态聚合栅格?

即使用示例 .flt 文件: https://www.ngdc.noaa.gov/mgg/global/relief/ETOPO2/ETOPO2v2-2006/ETOPO2v2c/raw_binary/

library("dplyr")
library("ggplot2")
library("shiny")
library("raster")

ui <- fluidPage(

    mainPanel(
            plotOutput("canvasHere")
    ),

      sliderInput("sliderRes", label = h5("Resolution reduction"),
        min = 1, max = 100, value = 5)      

) ## UI end

shinyServer <- function(input, output) {

    BMgradient <- raster("/home/berg/Downloads/ETOPO2v2c_f4_LSB/ETOPO2v2c_f4_LSB.flt",crs=NA,template=NULL)

    ##resolutionFactor <- input$sliderRes
    resolutionFactor <- 5

    BMgradient <- aggregate(BMgradient, fact=resolutionFactor, fun=max)

    p <- rasterToPoints(BMgradient)
    bmdf <- data.frame(p)
    colnames(bmdf) <- c("bbb", "ccc", "varFillBBB")

    output$canvasHere <- renderPlot({
        ggplot()+
            geom_tile(data=bmdf,aes(bbb,ccc,fill=varFillBBB)) 

    })
}

print("Processed code")

runApp(list(ui = ui, server = shinyServer))

现在,通常我会使用以下方法调整服务器中的变量:

resolutionFactor <- input$sliderRes

然而,这似乎不适用于栅格聚合,我只需要使用静态分辨率因子,例如:resolutionFactor <- 5

如何通过 UI 中的滑块动态执行此操作?

经过一段时间后,我设法找到了解决方案。

栅格聚合本身需要放置在反应环境中。 即

output$yourOutput <- renderPlot({

BMgradient <- raster(...)
resolutionFactor <- input$sliderRes

## Rest of raster code

ggplot()+
        geom_tile(data=bmdf,aes(bbb,ccc,fill=varFillBBB))
})

然后,您可以手动调整滑块,栅格将动态聚合。