[0049] 下面结合附图对本发明方案进行详细说明。
[0050] 本实施例提供的多格式天气雷达基数据文件转NetCDF文件方法,包括如下步骤:
[0051] 1) 通过文件后缀名匹配以及文件长度匹配的联合判据识别方法识别当前需要转换的雷达基数据文件类型。
[0052] 2)根据所述当前需要转换的雷达基数据的文件类型,并进行解析,提取出参数信息和观测数据。
[0053] 3)定义一个标准的NetCDF格式文件。
[0054] 4)根据步骤3)中定义的NetCDF标准格式将步骤2)中解析出的参数信息和观测数据转换成所述NetCDF标准格式。
[0055] 在进行格式转换之前,首先需要识别当前需要转换的雷达基数据文件类型。本方案采用文件后缀名匹配及文件长度匹配的联合判据识别方法,即步骤1)采用的方法。
[0056] 目前国内常见的雷达型号有北京敏视达公司的SA/SB雷达,成都国营784厂的SC/CD雷达,南京十四所的CB雷达。另外,还有即将或计划投入业务使用的双线偏振雷达、相控阵气象雷达等。不同厂家对基数据格式有不同的定义,同一厂家生产的不同型号雷达由于雷达参数性能的不同,基数据格式也是不同的。
[0057] 其中,步骤1)中的具体内容包括:通过文件后缀名匹配判据识别方法对当前雷达基数据文件进行匹配检索,若检测到当前雷达基数据文件的后缀名以“A”字母或“B”字母结尾,则判定当前雷达基数据文件为SA基数据文件类型或SB基数据文件类型;若检测到当前雷达基数据文件的后缀名以“V”字母或“P”字母结尾,则判定当前雷达基数据文件为SC基数据文件类型;若检测结果均不符合上述条件,则通过文件长度匹配判据识别方法,鉴别当前雷达基数据文件是否为相控阵雷达基数据文件类型。
[0058] 进一步的,步骤1)中相控阵雷达基数据文件类型的判定依据为文件的总字节数为19328字节。
[0059] 步骤2)的具体步骤如下:
[0060] 2-1)定义三个三维数组,用于分别存储当前雷达基数据的文件中解析获取的反射率因子、平均径向速度以及谱宽数据,三维数组数据实际存储空间大小根据基数据文件中的状态标志、仰角、方位角以及距离库长设定;
[0061] 进一步的,三维数组中的第一层用于存放雷达单个径向上的反射率因子、平均径向速度或谱宽数据,第一层存储空间的大小根据该类型雷达基数据文件中最大测量距离长度和最小分辨距离库参数设定;三维数组中的第二层用于存放不同方位上的雷达径向数据,第二层存储空间的大小通常为360,即0°-360°;三维数组中的第三层用于存放不同仰角层下的雷达径向数据,第三层存储空间的大小根据该类型雷达基数据文件中的状态标志设定,当状态标志表示非文件尾时,文件位置指向下一仰角,同时第三层的层数增加一层,当状态标志表示已到文件尾时,循环结束,三维数组的第三层存储空间大小即为当前循环累加的总层数。
[0062] 2-2)若判定雷达基数据为SA基数据文件类型或SB基数据文件类型:首先,读取雷达基数据,分别读取当前径向数据的参数信息以及观测数据,再根据所述参数信息将所述观测数据存入对应的三维数组,参见图1。对应的三维数组设置如下:
[0063] float ref_data_784[20][360][1000]; //反射率因子
[0064] float vel_data_784[20][360][1000]; //径向速度
[0065] float spw_data_784[20][360][1000]; //谱宽
[0066] 若判定雷达基数据为SC基数据文件类型:首先,读取文件的头信息,获取仰角循环次数与方位循环次数的上限值;设置仰角循环次数与方位循环次数的初始值均为0,再读取当前径向数据的数据信息,方位循环次数自加1,若方位循环次数达到上限值,则仰角循环次数自加1,方位循环次数初始化为0,并读取基数据文件的数据区信息,根据当前仰角和方位将数据存入对应的数组,直至仰角循环次数与方位循环次数均达到上限值,参见图2。对应的三维数组设置如下:
[0067] float ref_data_784[20][360][1000]; //反射率因子
[0068] float vel_data_784[20][360][1000]; //径向速度
[0069] float spw_data_784[20][360][1000]; //谱宽
[0070] 若判定雷达基数据为相控阵雷达基数据文件:设基数据文件大小为,每个径向数据结构大小为,则该文件所含雷达径向数为:,将每个径向数据中包含的仰角信息与三维数组形成映射关系,以存储所述反射率因子、径向速度和谱宽值,对应的三维数组设置如下:float ref_data_phase[M][N][3200]; //反射率因子
[0071] float vel_data_phase[M][N][3200]; //径向速度
[0072] float spw_data_phase[M][N][3200]; //谱宽
[0073] 文件中观测数据的获取流程与SA基数据文件类型或SB基数据文件类型的流程类似。
[0074] 步骤3)的内容具体包括维度的定义、变量的定义、属性的定义以及数据的定义。其中,
[0075] 维度的定义:天气雷达探测方式是建立在极坐标系上的。因此,可以建立包括距离、方位、俯仰和时间的四维自变量。考虑到不同型号雷的性能参数不同,观测的距离、方位及俯仰范围也不同。因此,将距离、方位和俯仰的范围进行标准化,具体定义如下:
[0076] radialR = 1000 //径向距离库范围(反射率因子)
[0077] radialV = 1000 //径向距离库范围(径向速度)
[0078] radialW = 1000 //径向距离库范围(谱宽)
[0079] azimuth = 360 //方位角范围
[0080] elevation = 20 //俯仰角范围
[0081] time = 1 //当前观测时间。
[0082] 变量的定义:普通的变量为非矩阵型变量,主要包括雷达站点信息、雷达性能参数和观测参数信息。在NetCDF文件中定义如下:
[0083] Char* country //国家名
[0084] Char* station //站点名
[0085] ……
[0086] Float beamH //水平波宽
[0087] Int wavelength //波长
[0088] ……
[0089] Char* sminute //开始观测时间(分)
[0090] Char* eminute //结束观测时间(秒)
[0091] 天气雷达观测到的矩阵型变量主要包括反射率因子、平均径向速度和谱宽。这些变量大小与维度有关。因此,NetCDF中矩阵型变量的标准格式定义如下:
[0092] float reflectivity(radialR,azimuth,elevation) //反射率因子[0093] float velocity(radialR,azimuth,elevation) //平均径向速度[0094] float spw(radialR,azimuth,elevation) //谱宽
[0095] float az(azimuth ,elevation)//波束实际方位角。
[0096] 属性的定义:属性是对变量的说明和解释,在NetCDF中属性主要用来定义物理量的单位。标准格式的定义如下:
[0097] reflectivity:unit = dBZ //反射率因子单位
[0098] velocity:unit = m/s //平均径向速度单位
[0099] spw:unit = nm //谱宽单位。
[0100] 数据的定义:雷达实际观测的数据值都存放在此处,每个变量对应一组数据值数组,数组范围的大小由该变量的总维度大小决定。本文NetCDF中数据的标准格式定义如下:
[0101] reflectivity = fRData[20*360*1000] //反射率因子值
[0102] velocity = fVData[20*360*1000] //平均径向速度值
[0103] spw = fWData[20*360*1000] //谱宽值。
[0104] 步骤4)中对当前基数据文件超出标准格式范围的数据予以去除,不足标准格式范围的数据用“-999”无效值进行补充。
[0105] 参照图3所示的流程,具体实施方式如下:
[0106] 1)建立数据库,实现系统权限认证及安全认证功能。
[0107] 2)实现雷达基数据文件的识别,能够区分SA/SB格式、SC/CD格式及新型相控阵雷达多种格式。识别方法可参照步骤1)的内容。
[0108] 3)解析获取不同雷达基数据文件中的主要性能参数和观测数据,提取方法参照步骤2)的内容。
[0109] 4)定义标准NetCDF文件格式,能够兼容不同雷达基数据格式,完成雷达数据格式的统一。具体转换方法参照步骤3)以及步骤4)的内容。
[0110] 5)加载netcdf.dll动态库、netcdf.lib静态库及相关头文件和源文件,快速完成NetCDF文件的读写操作。