气象要素数据提取程序

作者:http://hongbozhang.net/wph/

程序简介:此程序用于自动提取由中国科学院青藏高原研究所阳坤研究员课题组制备的“中国区域高时空分辨率地面气象要素驱动数据集”(ITPCAS CMFD)

适用对象:无特殊需要的简单数据提取(即不想使用Java、Fortran、Python、C/C++、IDL等编程读取该数据集的同学)
特点:(1)基于采样点坐标,由nc数据输出csv文本数据;(2)将nc数据转换成带地理坐标系的通用Tiff格式

程序作者:zhanghongbo ([email protected])
程序界面:

使用方法及描述:
本程序有两种提取模式,分别是“采样点模式”和“区域模式”, 顾名思义,即可以进行针对采样点的批量提取和基于指定经纬度范围的区域提取。详述如下,
1、采样点模式

采样点模式指的是:根据用户输入的采样点坐标(可以输入任意多的采样点,即可以进行批处理),提取对应采样点的指定气象要素值。

步骤:

(1)指定输入目录:

2
如下图,输入目录下有两个CMFD数据集中的nc文件

3
由文件名可以看出,这两个文件是1984年3月和4月的降水数据

(2)指定输出目录:

4
简单起见,我把输出目录设置为与输入目录相同

(3)指定时区:

气象要素数据提取程序_第1张图片

ITPCASCMFD数据是基于格林尼治时间制备的,所以为了与北京时间或西藏地方时的数据相对应,程序中提供了“输出时区”的设置
如上图,我将“输出时区”设置为8,即程序将会根据北京时间对原始数据自动进行时间上的推移

(4)设置采样点参数文件

为了简化实现,采样点参数文件使用的是特定格式的excel表格文件作为输入,如下图


程序自带一个名为“parameter.xls”的模板参数文件,用户只需根据自身需要修改该参数文件的内容即可。

在variable关键字的右边第一列输入想要提取的气象变量的变量名,有效的变量名只能是CMFD数据集中提供的气象变量,如下表

气象要素 变量名 单位 物理意义
近地面气温 temp K 瞬时近地面(2m)气温
地表气压 pres Pa 瞬时地表气压
近地面空气比湿 shum kg/ kg 瞬时近地面空气比湿
近地面全风速 wind m /s 瞬时近地面(风速仪高度)全风速
向下短波辐射 srad W /平方米 小时平均 (-1.5hr ~ +1.5hr) 向下短波辐射
向下长波辐射 lrad W /平方米 小时平均 (-1.5hr ~ +1.5hr) 向下长波辐射。
降水率 prec mm/hr 小时平均 (-3.0hr ~ 0.0hr) 降水率。

在“start”和”end”之间输入所有想要提取的采样点的经纬度坐标(先经度,后纬度),然后,在之后的第三列可以输入一个互不相同的“站点标签”,用于区分位置非常接近的站点并且便于查看输出结果。注意的是:用户需自行保证start和end之间没有空行

修改之后记得保存,并将该文件指定为采样点文件,如下

气象要素数据提取程序_第2张图片
(5)点击运行
由于只提取两个月的数据而且只有两个站点,只用时2秒。

气象要素数据提取程序_第3张图片

在指定的输出目录下查看结果,
结果文件的命名格式为:站点标签_经度_纬度.csv

 

如果不指定站点标签的话,将只有“经度_纬度.csv”,对于未知十分接近的站点,虽然经纬度输出可以达到小数点5位,基本上不会出现位置重合的情况,但是,用户可能会不小心输入重复的站点坐标,而且输入站点名称更利于查看结果。所以,推荐在参数文件中经纬度之后的第三列输入“站点标签”

(6)后处理

打开任一结果文件,

10
结果的输出格式为:年,月,日,第1个3小时记录,第2个三小时记录,,,第8个3小时记录。

如果只需要日数据,那么在Excel中,输入相应的统计公式然后自动填充即可

然而,很多情况下,需要月尺度或年尺度的数据,所以,针对本程序的输出结果,我又写了四个简单的月尺度和年尺度的统计小程序,如下:

11
从下到下,依次是:月累加、月平均、年累加和年平均

因为计算的是降水量,故而以“月累加”为例,将”Monthly_accumulation.exe”文件拷到结果文件所在的目录,双击该程序


程序会自动搜索本目录内符合程序数据结果格式的csv文件,需要注意的是:在运行该程序的时候不要使用excel打开结果文件,否则程序会异常退出

输出的月尺度结果为:

13
这里需要特别注意的是:虽然我们只输入了1984年3和4月的CMFD数据,但是,由于输出时区设置为8,结果文件中就会多出下个月1号的两个3小时数据,如下图

14
与之对应的,3月1号的最初两个3小时数据是缺失的,如下

15
程序以“-32767”作为缺测标识

这四个月尺度和年尺度计算程序会自动忽略缺测值,但是,如果设置了“输出时区”,请记住结果文件中最后一个月的结果是“无效”的。

最后,另一个需要特别注意的问题是气象变量的“单位”,比如,降水的单位是“毫米每小时”,然而,其在原数据集中是以每3小时一个记录存储的,因此在采样点模式下,本程序自动将每条降水记录乘以3。但是,本程序只对较为常用的降水数据做了这种特殊处理,所以用户可能需要根据自己的需要对结果文件进行一些必要的处理。此外,在“区域模式”中,并没有对降水做乘以3的处理,因为使用GIS处理时可以很方便的对栅格进行各种数学运算。
2、区域模式

区域模式主要是针对GIS处理,ITPCAS CMFD数据集是使用NetCDF格式存储的,在进行常规GIS处理时很不方便,使用Arcgis这种桌面版GIS软件处理时,速度较慢、不稳定而且操作也很繁琐。所以,本程序提供了 自动将数据格式转换为方便GIS做区域分析的tif格式 的功能。

使用步骤如下:

(1)设置输入、输出目录、输出时区:

同采样点模式

(2)设置“统计”:

与采样点模式不同,区域模式需要指定统计策略,如下图:


有三种统计方式:3小时、日平均、日加和。各自含义如下,

3小时:即保持数据集的原始时间分辨率,以每三小时一个记录进行输出

日平均:将每天的8个3小时记录加和之后除以8

日加和:将每天的8个3小时记录进行加和

本案例提取的是降水,因而使用“日加和”方式,需要注意的是,如前所述,实际的日降水量还要乘以3

(3)设置“还原”

设置此项的由来:

ITPCASCMFD数据在存储时是以短整型格式存储的,该值并不是气象变量的真值,需要进行val * scale + offset的计算之后才能“还原”成为真实的浮点型数据。之前设置此项,是为了节省数据存储空间,但是实际提取时,由于我使用了LZW压缩算法,得到的结果文件并不大,因而,推荐勾选该项以直接获得有意义的数据。

(4)设置“区域范围”

点击输入框,就会弹出输入范围的设置界面,如下


设置后东西南北的经纬度界限之后,请记得点击“save”保存设置

但是,实际上,结果文件的存储空间并不大,所以这里并不推荐设置区域范围(如果不设置区域范围,程序将会输出全范围即全中国的数据),点击任意其他输入框即可取消区域范围的输入界面。

本案例留空

(5)点击“运行”


程序以较快的速度完成了任务

查看结果文件:

气象要素数据提取程序_第4张图片
结果文件的命名格式为:变量名+年+月+日.tif,可以看到,单个全范围的文件也只有几百KB

然后,使用Arcgis可以很方便的打开一个结果文件进行查看,


上图是使用该程序提取的北京时间1984年3月18日的日降水量分布

程序在输出tif文件时,使用的是wgs84地理坐标系,如下

气象要素数据提取程序_第5张图片
其经纬度范围严格遵循原数据集。
总的来说,这个程序的特点就是小巧灵快( 自以为,  )

最后,由于种种原因,其实我根本用不到自己写的这个程序,所以我就在右上角题了四个小字,如果觉得碍眼,点击该处即可取消显示。。。

2015.1.30更新内容:
1、修正“采样点模式”中,“Yearly_average”输出结果为乱码的BUG
2、修正“区域模式”中,每月第一天数据有误的BUG
3、为“区域模式”添加了年尺度和月尺度的统计功能
主程序下载: https://pan.baidu.com/s/1MDCEuZ3RIONtZ4TxkFZqnw      (提取码: pq5n)

为采样点模式写的四个小工具下载地址:http://pan.baidu.com/s/1dDtQEbB

POSTED IN: C#

你可能感兴趣的:(数据资料)