在Rshiny中计算NDVI

时间:2020-11-04 10:43:59

标签: r shiny satellite-image

我正在尝试创建一个小的闪亮应用程序,该程序可以从文件夹中加载的tiff文件中绘制NDVI。

这就是我所做的:

library(shiny)
library(leaflet)
library(dbplyr)
library(raster)
library(rgdal)



ui<-fluidPage(
  
  titlePanel("NDVI calculation"),
  
  sidebarPanel(
    fileInput('layer', 'Choose Layer', multiple=FALSE, accept='tiff')
  ),
  imageOutput(outputId = "ndvi")
  
  
)

server<-function(input, output) {
  
    output$ndvi <- renderPlot({
     
      S2 <- input$layer
      
      S2 <- stack(S2)
      
      S2 <- brick(S2)
      
      S2_ndvi <- (S2[[4]] - S2[[1]]) / (S2[[4]] + S2[[1]])
      

      
      plot(S2_ndvi,
           main = "NDVI of site 12RD8",
           axes = FALSE, box = FALSE)    })
    
    
  }
  
  
  


shinyApp( ui=ui, server=server)

但是我收到此错误消息:

警告:堆栈错误。默认值:至少需要一个向量元素

有人可以帮我吗?

1 个答案:

答案 0 :(得分:2)

现在,有光泽的应用程序正尝试从服务器中的任何内容创建堆栈,因为加载该应用程序时,input $ layer为null。在上载图层之前隐藏该错误的最简单方法是使用 type pickup_time insert_time first_value MAN 2020-11-01 03:00:00 2020-11-01 01:00:00 2020-11-01 04:00:00 CAT 2020-11-02 11:00:00 2020-11-02 05:00:00 2020-11-02 12:00:00 MAN 2020-11-01 09:00:00 2020-11-01 06:00:00 2020-11-01 10:00:00 。您将所需的输入放置在req()内,除非这些输入具有值,否则该应用将不会运行该代码块。

req()

修改 您还可以根据input $ layer是否为null server<-function(input, output) { output$ndvi <- renderPlot({ req(input$layer) S2 <- input$layer S2 <- stack(S2) S2 <- brick(S2) S2_ndvi <- (S2[[4]] - S2[[1]]) / (S2[[4]] + S2[[1]]) plot(S2_ndvi, main = "NDVI of site 12RD8", axes = FALSE, box = FALSE) }) } 编写if语句,如果为null则要求用户上传文件