netcdf介绍及在C语言中应用(2)

2020-02-21 17:44

NetCDF介绍

③ 变量处理函数,实现变量的定义或检索,包括定义或检索变量名、变量ID。 ④ 属性处理函数,实现属性的定义或检索。

2、C版本的NetCDF 数据的接口函数库简介

(1)文件处理函数

NetCDF数集的创建:nc_create NetCDF数集的打开:nc_open NetCDF数集的关闭:nc_close (2)维处理函数 维的定义:nc_def_dim

维的查询:nc_inq_dimid、nc_inq_dim Family 维的重新命名:nc_rename_dim (3)变量处理函数 变量的定义:nc_def_var

变量的查询:nc_inq_varid、nc_inq_var Family 变量赋值:nc_put_var1/vars/vara/varm 变量的读取:nc_get_var1/vars/vara/varm 变量的重新命名:nc_rename_var 变量的复制:nc_var_copy (4)属性处理函数 属性的创建:nc_put_att 属性的查询:nc_inq_att Family 属性的读取:nc_get_att 属性的重新命名:nc_rename_att 属性的复制:nc_att_copy 属性的删除:nc_del_att

四、简单的雷达数据资料模型设计

NetCDF包括3个部分:维数,变量和属性。这3个部分相互参照、相互联系,构成NetCDF数据模型,见图l。

6

NetCDF介绍

Dataset location:URL nc.open() Attribute name:String value:1D Array type:DataType Dimension name:String length:int isUnlimited() Variable name:String shape:dimensions type:DataType Data Type byte char short int float double

图1 NetCDF数据模型图

图1中Dataset表示NetCDF文件数据集,由3个部分组成:属性(attributes)、变量(variables)和维数(dimensions)。其中,变量用于存放数据;维数用于指定气象资料在多维空间中形状;属性可以分为2类:一类为变量属性,用于对气象数据变量的名称、缺省值、单位以及格式等性质进行说明,另一类为全局属性,用于数据集的整体说明,如发布数据集的时间和机构,数据集遵循的约定等。图1只是给出了NetCDF的抽象数据模型,但将该抽象的数据模型具体应用到不同的维数、不同结构的气象资料上,还需要更为详细的数据模型设计。以下将给出1种简单的雷

达资料数据模型设计。为了便于清楚地表示数据模型,在此用C语言描述。

1、 简单的雷达数据资料

7

NetCDF介绍

Dataset radar.nc Attribute unit Dimension lay RadNum[] RbNum[] RbLen[] variable Ele Ref[] 图2 简单的雷达数据资料模型图

说明:

文件名:radar.nc

维:lay:扫描层数,RadNum[]:各层的径向数,RbNum[]:每个径向上的距离库数,RbLen[]:各层的距离库库长。

变量:Ele:扫描层的仰角,Ref[]:每层的反射率数据。 属性:unit:单位.

2、具体的C语言程序

假定cut里存放的是扫描层数,RadNum[]里存放的是各层的径向数,RbNum[]里存放的是每个径向上的距离库数,RbLen[]里存放的是各层的距离库库长。iEle[]里存放的是各个扫描层的仰角。data[]里存放的是所有扫描层的反射率数据。现在我们要按照上面的模型将这些数据存放到radar.nc文件中。具体程序如下:

#include \#include #include \#include \

void handle_error(int status);

int _tmain(int argc, _TCHAR* argv[]) {

unsigned short int cut; unsigned short int *RadNum = new unsigned short int[cut];

8

NetCDF介绍

unsigned short int *RbNum = new unsigned short int[cut]; unsigned short int *RbLen = new unsigned short int[cut]; short int *Ele = new short int[cut]; unsigned char *data = new unsigned char[le]; int status; int ncid; int layid; int *RadNumid = new int [cut]; int *RbNumid = new int [cut]; int *RbLenid = new int [cut]; int *Refid = new int [cut]; int Eleid; char RadNname[][10] = {{\},{\},{\}, {\},{\},{\},{\},{\}, {\},{\},{\},{\},{\}, {\},{\},{\},{\},{\}, {\},{\},{\},{\},{\}, {\},{\},{\},{\},{\}, {\},{\}}; char RbNname[][10] = {{\},{\},{\}, {\},{\},{\},{\},{\}, {\},{\},{\},{\},{\}, {\},{\},{\},{\},{\}, {\},{\},{\},{\},{\}, {\},{\},{\},{\},{\}, {\},{\}}; char RbLname[][10] = {{\},{\},{\}, {\},{\},{\},{\},{\}, {\},{\},{\},{\},{\}, {\},{\},{\},{\},{\}, {\},{\},{\},{\},{\}, {\},{\},{\},{\},{\}, {\},{\}}; char Refname[][10] = {{\},{\},{\}, {\},{\},{\},{\},{\}, {\},{\},{\},{\},{\}, {\},{\},{\},{\},{\}, {\},{\},{\},{\},{\}, {\},{\},{\},{\},{\}, {\},{\}}; // Create a NetCDF Dataset 'radar.nc' status = nc_create(\, NC_SHARE, &ncid); if (status != NC_NOERR) handle_error(status);

9

NetCDF介绍

// Create Dimension 'lay'

status = nc_def_dim(ncid, \, cut, &layid); if (status != NC_NOERR) handle_error(status); // Create variable 'Ele' status = nc_def_var (ncid, \, NC_INT, 1, &layid, &Eleid); if (status != NC_NOERR) handle_error(status); int i = 0; for (i=0;i

// 定义维:个层的径向数 status = nc_def_dim(ncid, RadNname[i], RadNum[i], &RadNumid[i]); if (status != NC_NOERR) handle_error(status); // 定义维:各层径向上距离库数 status = nc_def_dim(ncid, RbNname[i], RbNum[i], &RbNumid[i]); if (status != NC_NOERR) handle_error(status); // 定义维:各层径向的距离库库长 status = nc_def_dim(ncid, RbLname[i], RbLen[i], &RbLenid[i]); if (status != NC_NOERR) handle_error(status); //定义变量:反射率 int Ref_dimids[2]; Ref_dimids[0] = RadNumid[i]; Ref_dimids[1] = RbNumid[i]; status = nc_def_var (ncid, Refname[i], NC_INT, 2, Ref_dimids, &Refid[i]); if (status != NC_NOERR) handle_error(status); //定义属性: /*status = nc_put_att_text(ncid,Refid[i],\ if (status != NC_NOERR) handle_error(status);*/ } nc_enddef(ncid); //退出定义模式 // 为变量Ele赋值 int *iEle = new int[cut]; for (i=0; i

10


netcdf介绍及在C语言中应用(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:经济法复习

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: