气象要素数据提取程序

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创建一个功能完整的Windows风格计算器程序

《使用Python创建一个功能完整的Windows风格计算器程序》:本文主要介绍如何使用Python和Tkinter创建一个功能完整的Windows风格计算器程序,包括基本运算、高级科学计算(如三... 目录python实现Windows系统计算器程序(含高级功能)1. 使用Tkinter实现基础计算器2.

Java注解之超越Javadoc的元数据利器详解

《Java注解之超越Javadoc的元数据利器详解》本文将深入探讨Java注解的定义、类型、内置注解、自定义注解、保留策略、实际应用场景及最佳实践,无论是初学者还是资深开发者,都能通过本文了解如何利用... 目录什么是注解?注解的类型内置注编程解自定义注解注解的保留策略实际用例最佳实践总结在 Java 编程

一文教你Python如何快速精准抓取网页数据

《一文教你Python如何快速精准抓取网页数据》这篇文章主要为大家详细介绍了如何利用Python实现快速精准抓取网页数据,文中的示例代码简洁易懂,具有一定的借鉴价值,有需要的小伙伴可以了解下... 目录1. 准备工作2. 基础爬虫实现3. 高级功能扩展3.1 抓取文章详情3.2 保存数据到文件4. 完整示例

使用Java将各种数据写入Excel表格的操作示例

《使用Java将各种数据写入Excel表格的操作示例》在数据处理与管理领域,Excel凭借其强大的功能和广泛的应用,成为了数据存储与展示的重要工具,在Java开发过程中,常常需要将不同类型的数据,本文... 目录前言安装免费Java库1. 写入文本、或数值到 Excel单元格2. 写入数组到 Excel表格

python处理带有时区的日期和时间数据

《python处理带有时区的日期和时间数据》这篇文章主要为大家详细介绍了如何在Python中使用pytz库处理时区信息,包括获取当前UTC时间,转换为特定时区等,有需要的小伙伴可以参考一下... 目录时区基本信息python datetime使用timezonepandas处理时区数据知识延展时区基本信息

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义

SpringMVC 通过ajax 前后端数据交互的实现方法

《SpringMVC通过ajax前后端数据交互的实现方法》:本文主要介绍SpringMVC通过ajax前后端数据交互的实现方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价... 在前端的开发过程中,经常在html页面通过AJAX进行前后端数据的交互,SpringMVC的controll

Pandas统计每行数据中的空值的方法示例

《Pandas统计每行数据中的空值的方法示例》处理缺失数据(NaN值)是一个非常常见的问题,本文主要介绍了Pandas统计每行数据中的空值的方法示例,具有一定的参考价值,感兴趣的可以了解一下... 目录什么是空值?为什么要统计空值?准备工作创建示例数据统计每行空值数量进一步分析www.chinasem.cn处

如何使用 Python 读取 Excel 数据

《如何使用Python读取Excel数据》:本文主要介绍使用Python读取Excel数据的详细教程,通过pandas和openpyxl,你可以轻松读取Excel文件,并进行各种数据处理操... 目录使用 python 读取 Excel 数据的详细教程1. 安装必要的依赖2. 读取 Excel 文件3. 读

Spring 请求之传递 JSON 数据的操作方法

《Spring请求之传递JSON数据的操作方法》JSON就是一种数据格式,有自己的格式和语法,使用文本表示一个对象或数组的信息,因此JSON本质是字符串,主要负责在不同的语言中数据传递和交换,这... 目录jsON 概念JSON 语法JSON 的语法JSON 的两种结构JSON 字符串和 Java 对象互转