使用R中的输入聚合栅格

时间:2017-06-30 18:00:42

标签: r shiny aggregate raster r-raster

如何在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中的滑块动态执行此操作?

1 个答案:

答案 0 :(得分:0)

过了一会儿,我找到了解决办法。

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

output$yourOutput <- renderPlot({

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

## Rest of raster code

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

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