气象要素数据提取程序

2023-11-07 06:32

本文主要是介绍气象要素数据提取程序,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

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

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

程序作者:zhanghongbo (zhanghongbo@itpcas.ac.cn)
程序界面:

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

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

步骤:

(1)指定输入目录:

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

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

(2)指定输出目录:

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

(3)指定时区:

5

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

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

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


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

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

气象要素变量名单位物理意义
近地面气温tempK瞬时近地面(2m)气温
地表气压presPa瞬时地表气压
近地面空气比湿shumkg/ kg瞬时近地面空气比湿
近地面全风速windm /s瞬时近地面(风速仪高度)全风速
向下短波辐射sradW /平方米小时平均 (-1.5hr ~ +1.5hr) 向下短波辐射
向下长波辐射lradW /平方米小时平均 (-1.5hr ~ +1.5hr) 向下长波辐射。
降水率precmm/hr小时平均 (-3.0hr ~ 0.0hr) 降水率。

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

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

7
(5)点击运行
由于只提取两个月的数据而且只有两个站点,只用时2秒。

8

在指定的输出目录下查看结果,
结果文件的命名格式为:站点标签_经度_纬度.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)点击“运行”


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

查看结果文件:

19
结果文件的命名格式为:变量名+年+月+日.tif,可以看到,单个全范围的文件也只有几百KB

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


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

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

21
其经纬度范围严格遵循原数据集。
总的来说,这个程序的特点就是小巧灵快( 自以为,  )

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

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#

这篇关于气象要素数据提取程序的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/361877

相关文章

Python在二进制文件中进行数据搜索的实战指南

《Python在二进制文件中进行数据搜索的实战指南》在二进制文件中搜索特定数据是编程中常见的任务,尤其在日志分析、程序调试和二进制数据处理中尤为重要,下面我们就来看看如何使用Python实现这一功能吧... 目录简介1. 二进制文件搜索概述2. python二进制模式文件读取(rb)2.1 二进制模式与文本

Django调用外部Python程序的完整项目实战

《Django调用外部Python程序的完整项目实战》Django是一个强大的PythonWeb框架,它的设计理念简洁优雅,:本文主要介绍Django调用外部Python程序的完整项目实战,文中通... 目录一、为什么 Django 需要调用外部 python 程序二、三种常见的调用方式方式 1:直接 im

C#实现将XML数据自动化地写入Excel文件

《C#实现将XML数据自动化地写入Excel文件》在现代企业级应用中,数据处理与报表生成是核心环节,本文将深入探讨如何利用C#和一款优秀的库,将XML数据自动化地写入Excel文件,有需要的小伙伴可以... 目录理解XML数据结构与Excel的对应关系引入高效工具:使用Spire.XLS for .NETC

Python自动化提取多个Word文档的文本

《Python自动化提取多个Word文档的文本》在日常工作和学习中,我们经常需要处理大量的Word文档,本文将深入探讨如何利用Python批量提取Word文档中的文本内容,帮助你解放生产力,感兴趣的小... 目录为什么需要批量提取Word文档文本批量提取Word文本的核心技术与工具安装 Spire.Doc

使用Python将PDF表格自动提取并写入Word文档表格

《使用Python将PDF表格自动提取并写入Word文档表格》在实际办公与数据处理场景中,PDF文件里的表格往往无法直接复制到Word中,本文将介绍如何使用Python从PDF文件中提取表格数据,并将... 目录引言1. 加载 PDF 文件并准备 Word 文档2. 提取 PDF 表格并创建 Word 表格

MySQL数据目录迁移的完整过程

《MySQL数据目录迁移的完整过程》文章详细介绍了将MySQL数据目录迁移到新硬盘的整个过程,包括新硬盘挂载、创建新的数据目录、迁移数据(推荐使用两遍rsync方案)、修改MySQL配置文件和重启验证... 目录1,新硬盘挂载(如果有的话)2,创建新的 mysql 数据目录3,迁移 MySQL 数据(推荐两

Python数据验证神器Pydantic库的使用和实践中的避坑指南

《Python数据验证神器Pydantic库的使用和实践中的避坑指南》Pydantic是一个用于数据验证和设置的库,可以显著简化API接口开发,文章通过一个实际案例,展示了Pydantic如何在生产环... 目录1️⃣ 崩溃时刻:当你的API接口又双叒崩了!2️⃣ 神兵天降:3行代码解决验证难题3️⃣ 深度

MySQL快速复制一张表的四种核心方法(包括表结构和数据)

《MySQL快速复制一张表的四种核心方法(包括表结构和数据)》本文详细介绍了四种复制MySQL表(结构+数据)的方法,并对每种方法进行了对比分析,适用于不同场景和数据量的复制需求,特别是针对超大表(1... 目录一、mysql 复制表(结构+数据)的 4 种核心方法(面试结构化回答)方法 1:CREATE

详解C++ 存储二进制数据容器的几种方法

《详解C++存储二进制数据容器的几种方法》本文主要介绍了详解C++存储二进制数据容器,包括std::vector、std::array、std::string、std::bitset和std::ve... 目录1.std::vector<uint8_t>(最常用)特点:适用场景:示例:2.std::arra

MySQL中的DELETE删除数据及注意事项

《MySQL中的DELETE删除数据及注意事项》MySQL的DELETE语句是数据库操作中不可或缺的一部分,通过合理使用索引、批量删除、避免全表删除、使用TRUNCATE、使用ORDERBY和LIMI... 目录1. 基本语法单表删除2. 高级用法使用子查询删除删除多表3. 性能优化策略使用索引批量删除避免