2017-06-30 1 views
0

Comment agréger dynamiquement un raster dans Shiny?Agrégation d'un raster avec une entrée dans R

-à-dire en utilisant un exemple .flt fichier: 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)) 

Maintenant, d'habitude je venais de régler une variable dans le serveur en utilisant:

resolutionFactor <- input$sliderRes

Toutefois, cette doesn ne semble pas fonctionner pour l'agrégation raster, et je dois juste utiliser un facteur de résolution statique tels que: resolutionFactor <- 5

Comment est-ce que je peux faire cela dynamiquement via un curseur dans l'interface utilisateur?

Répondre

0

Après un moment, j'ai réussi à trouver la solution.

L'agrégation raster doit elle-même être placée dans l'environnement réactif. dire

output$yourOutput <- renderPlot({ 

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

## Rest of raster code 

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

Ensuite, vous pouvez régler manuellement le curseur et la trame agrège dynamiquement.