首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Rshiny计算NDVI

用Rshiny计算NDVI
EN

Stack Overflow用户
提问于 2020-11-04 10:43:59
回答 1查看 154关注 0票数 1

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

以下是我所做的:

代码语言:javascript
复制
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)

但我得到了一条错误信息:

警告:stack.default中的错误:至少需要一个向量元素

有人能帮帮我吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-04 20:07:43

现在,这个闪亮的应用程序正在尝试从服务器中的任何东西创建一个堆栈,因为当应用程序加载时,输入$layer是空的。在上传层之前,最简单的隐藏错误的方法是使用req()。在req()中放置所需的输入,应用程序将不会运行这段代码,除非这些输入有一个值。

代码语言:javascript
复制
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 语句,当它为空时,请用户上传一个文件

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64678531

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档