NetCDF 数据的存储
NetCDF-Java Online Tutorial | netCDF-Java Documentation
NetCDF 文件中的数据以数组形式存储。例如:某个位置处随时间变化的温度以一维数组的形式存储。某个区域内在指定时间的温度以二维数组的形式存储。
三维 (3D) 数据(如某个区域内随时间变化的温度)或四维 (4D) 数据(如某个区域内随时间和高度变化的温度)以一系列二维数组的形式存储。
三维数据:某个区域内随时间变化的数据。 |
四维数据:某个区域内随时间和高度变化的数据。 |
NetCDF 文件的基本组成部分
NetCDF 文件包含维度、变量和属性。将这几部分结合起来使用可以说明数据以及面向数组的数据集中各数据字段之间关系的含义。下图显示的是采用 CDL(网络公用数据格式语言)表示法来描述的 NetCDF 文件结构。CDL 是用于描述 NetCDF 文件内容的 ASCII 格式。
netcdf file:/D:/tmp/CLDAS/20210330000000/Z_NAFP_C_BABJ_20210330000805_P_CLDAS_RT_CHN_0P05_HOR-TEM-2021033000.GRB2 { dimensions: lon = 1401; lat = 1201; time = 1; height_above_ground = 1; variables: int LatLon_Projection; :grid_mapping_name = "latitude_longitude"; :earth_radius = 6371229.0; // double float lat(lat=1201); :units = "degrees_north"; float lon(lon=1401); :units = "degrees_east"; double reftime; :units = "Hour since 2021-03-30T00:00:00Z"; :standard_name = "forecast_reference_time"; :long_name = "GRIB reference time"; :calendar = "proleptic_gregorian"; double time(time=1); :units = "Hour since 2021-03-30T00:00:00Z"; :standard_name = "time"; :long_name = "GRIB forecast or observation time"; :calendar = "proleptic_gregorian"; float height_above_ground(height_above_ground=1); :units = "m"; :long_name = "Specified height level above ground"; :positive = "up"; :Grib_level_type = 103; // int :datum = "ground"; float Temperature_height_above_ground(time=1, height_above_ground=1, lat=1201, lon=1401); :long_name = "Temperature @ Specified height level above ground"; :units = "K"; :description = "Temperature"; :missing_value = NaNf; // float :grid_mapping = "LatLon_Projection"; :coordinates = "reftime time height_above_ground lat lon "; :Grib_Variable_Id = "VAR_0-0-0_L103"; :Grib2_Parameter = 0, 0, 0; // int :Grib2_Parameter_Discipline = "Meteorological products"; :Grib2_Parameter_Category = "Temperature"; :Grib2_Parameter_Name = "Temperature"; :Grib2_Level_Type = "Specified height level above ground"; :Grib2_Generating_Process_Type = "Analysis"; // global attributes: :Originating_or_generating_Center = "Beijing (RSMC)"; :Originating_or_generating_Subcenter = "0"; :GRIB_table_version = "1,0"; :Type_of_generating_process = "Analysis"; :file_format = "GRIB-2"; :Conventions = "CF-1.6"; :history = "Read using CDM IOSP GribCollection v3"; :featureType = "GRID"; } |
CDL 文件示例 |
维度、变量和属性的名称由任意的字母数字字符串(包括下划线和连字符)组成,并且以字母或下划线开头。但是,以下划线开头的名称是供系统使用的保留名称。NetCDF 名称区分大小写。
尺寸
NetCDF 维度包含名称和大小。维度大小是一个任意的正整数。每个 NetCDF 文件中只有一个维度的大小是“无限制”的。这类维度是无限维度或记录维度。无限维度的变量可以沿着该维度增加到任意长度。
维度可以用来表示实际物理维度,例如时间、经度、纬度或高度。维度还可以用来为其他量建立索引,例如,站点或模型的运行数。指定变量的 shape 时,可以多次使用同一个维度。
变量
变 量代表相同类型的值数组。变量用来存储 NetCDF 文件中的大部分数据。变量具有名称、数据类型以及在创建该变量时指定的维度列表所描述的 shape。维度数称为秩(或维数)。标量变量的秩为 0,矢量的秩为 1,矩阵的秩为 2。变量还可以具有能够在变量创建后进行添加、删除或更改的相关属性。
坐标变量
与维度同名的一维变量称为坐标变量。坐标变量与一个或多个数据变量的维度相关,通常用来定义与该维度相对应的物理坐标。
坐标变量对于 NetCDF 库来说没有特殊意义。但使用这个库的软件会采用一种特殊的方式来处理坐标变量。
属性
NetCDF 的属性用于存储辅助数据或元数据。大部分属性提供有关特定变量的信息。这些属性由变量名称与属性名称共同标识。
提供有关整个 NetCDF 文件的信息的属性称为全局属性。这些属性由属性名称与空变量名(CDL 中)或特殊空变量 ID(C 或 Fortran 中)共同标识。
约定
约定用来定义为每个变量中的数据提供确切描述的元数据及其空间和时态属性。约定有助于使用不同数据源的用户确定哪些量具有可比性。约定名称在 NetCDF 文件中以全局属性的形式表示。
目前,ArcGIS 支持 气候和预测 (CF)以及海洋/大气合作研究数据服务 (COARDS) 约定。然而,它可能也支持采用其他约定创建的 NetCDF 文件。