如何在 R 中打开 MODIS NetCDF 文件?

问题描述

我正在尝试在 R 中打开 MOdis Aqua NetCDF 文件 (https://oceandata.sci.gsfc.nasa.gov/MODIS-Aqua/L3SMI/2010/001/)。我尝试了许多软件包,但似乎没有一个能够处理文件格式。

library(ncdf4)

这不起作用。

nc_open("~/Desktop/A20100012010008.L3b_8D_CHL.nc")
#> Error in ncvar_type_to_string(rv$precint): Error,unrecognized type code of variable supplied: -1

但是,它适用于所有其他 NetCDF 文件。例如,我可以打开 CCI 合并文件

head(nc_open("~/Desktop/ESACCI-OC-L3S-CHLOR_A-MERGED-1M_MONTHLY_4km_GEO_PML_OCx-201701-fv5.0.nc"))
#> $filename
#> [1] "~/Desktop/ESACCI-OC-L3S-CHLOR_A-MERGED-1M_MONTHLY_4km_GEO_PML_OCx-201701-fv5.0.nc"
#> 
#> $writable
#> [1] FALSE
#> 
#> $id
#> [1] 131072
#> 
#> $safemode
#> [1] FALSE
#> 
#> $format
#> [1] "NC_FORMAT_NETCDF4_CLASSIC"
#> 
#> $is_GMT
#> [1] FALSE

关于为什么这不起作用的任何想法?

reprex package (v1.0.0) 于 2021 年 2 月 20 日创建

解决方法

当我使用 ncdump 查看其中一个 "Binned" files 时,它具有组属性,这意味着它使用 NetCDF enhanced data model。 因此,大多数 netCDF 软件不支持它。 ncdump 应该允许您批量导出到文本。另一种可能性是使用 HDF5 库读取文件。否则,我建议您通过其他方式获取数据。也许工作的 NetCDF 文件可能具有相同的数据,只是打包方式不同? 这是 ncdump 输出的一部分

group: level-3_binned_data {
  types:
    compound binListType {
      uint bin_num ;
      short nobs ;
      short nscenes ;
      float weights ;
      float time_rec ;
    }; // binListType
    compound binDataType {
      float sum ;
      float sum_squared ;
    }; // binDataType
    compound binIndexType {
      uint start_num ;
      uint begin ;
      uint extent ;
      uint max ;
    }; // binIndexType
  dimensions:
        binListDim = UNLIMITED ; // (5643478 currently)
        binDataDim = UNLIMITED ; // (5643478 currently)
        binIndexDim = UNLIMITED ; // (4320 currently)
  variables:
        binListType BinList(binListDim) ;
        binDataType chlor_a(binDataDim) ;
        binDataType chl_ocx(binDataDim) ;
        binIndexType BinIndex(binIndexDim) ;
  data:
  } // group level-3_binned_data