【问题标题】:Can't extract chlor_a values from NetCDF file using R无法使用 R 从 NetCDF 文件中提取 chlor_a 值
【发布时间】:2019-03-17 21:58:31
【问题描述】:

感谢您的帮助!

我正在尝试使用 R 软件从 NetCDF 文件中获取叶绿素 a 值,但我得到的只是缺失值,不适用。我想知道我是否做错了什么,或者文件是否真的缺少叶绿素 a 值。我可以用这个方法得到经度和纬度值。

我使用的文件来自这里https://oceandata.sci.gsfc.nasa.gov/MODIS-Aqua/Mapped/Monthly/4km/chlor_a/,我尝试的任何文件都缺少值,而不仅仅是脚本上显示的那个。

require(rgdal)
require(maptools)
require(raster)
require(sp)
require(rorwr)
require(RNetCDF)

clorofila<- "C:\\Users\\User\\Desktop\\files\\A20172132017243.L3m_MO_CHL_chlor_a_4km.nc"

cla <- open.nc(clorofila)

print.nc(cla)
file.inq.nc(cla)

clor <- var.get.nc(cla,"chlor_a",start=c(1,1),count=c(8640,4320))
Long <- var.get.nc(cla,"lon")
Lat <- var.get.nc(cla, "lat")

使用 ncdf4 和 raster 我得到了相同的结果

require(ncdf4)

clorofila10<- "C:\\Users\\User\\Desktop\\files\\A20172132017243.L3m_MO_CHL_chlor_a_4km.nc"

nc <- nc_open(clorofila10)

val <- ncvar_get(nc, "chlor_a")
nc_close(nc)

光栅

require(raster)
clorofila10<- "C:\\Users\\User\\Desktop\\files\\A20172132017243.L3m_MO_CHL_chlor_a_4km.nc"
clacla<-raster(clorofila10)
CHL1 <- raster(clorofila10, varname="chlor_a")
names(CHL1) <- 'chlor_a'

z <- getValues(CHL1)

非常感谢您所做的一切!

最好的问候

【问题讨论】:

    标签: r gis raster netcdf netcdf4


    【解决方案1】:

    使用 ncdf4 读取数据没有问题。有很多 NA,但不仅如此。这是这类数据的特点:你有一个相对于地球的矩阵,但有沿海叶绿素浓度的数据。

    tempF <- tempfile()
    download.file('https://oceandata.sci.gsfc.nasa.gov/cgi/getfile/A20172132017243.L3m_MO_CHL_chlor_a_4km.nc', tempF)
    
    library(ncdf4)
    ncF <- nc_open(tempF)
    val <- ncvar_get(ncF, "chlor_a")
    nc_close(ncF)
    
    > length(val)
    [1] 37324800
    
    > sum(is.na(val))
    [1] 20985329
    
    library(raster)
    plot(raster(t(val)))
    

    【讨论】:

    • 非常感谢您的回答!您是否使用了任何不同的功能?我仍然从结果矩阵的开头到结尾获得所有 NA 值。我检查了与 NA 不同的值,它没有给我矩阵中的其他值。
    • 没什么不同。我用完整的代码更新了答案。当您绘制海岸数据时,您可以看到;其余的海洋区域是 NAs。
    【解决方案2】:

    文件有值。你可以这样看:

    library(raster)
    r <- raster("A20172132017243.L3m_MO_CHL_chlor_a_4km.nc", var="chlor_a")
    plot(r)
    cellStats(r, mean)
    #[1] 0.4608675
    

    或者像这样

     freq(round(r/10))
    #  value    count
    # [1,]     0 16110852
    # [2,]     1   190403
    # [3,]     2    24723
    # [4,]     3     6790
    # [5,]     4     3064
    # [6,]     5     1666
    # [7,]     6      821
    # [8,]     7      524
    # [9,]     8      349
    #[10,]     9      209
    #[11,]    10       70
    #[12,]    NA 20985329
    

    或者

    summary(r)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-13
      • 2021-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-23
      • 2021-03-29
      相关资源
      最近更新 更多