python批量解析CLDAS-V2.0的.nc数据文件

这篇博客介绍了如何使用Python的NetCDF4和gdal库将CLDAS-V2.0的.nc数据文件(以四川省为例)转换为栅格图像。首先通过ArcMap的多维工具预览数据,然后通过编写Python脚本读取.nc文件,利用NetCDF4获取变量,并用gdal创建栅格数据,设置地理信息和投影,最后将数据写入.tif文件。脚本适用于批量处理多个.nc文件,并可在ArcMap中正常显示结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

处理CLDAS-V2.0的.nc数据文件——四川省为例

CLDAS-V2.0是中国气象局陆面数据同化系统实时产品数据集,可以从中国气象数据网下载在这里插入图片描述
以四川省为例,下载了一段时间的数据,数据格式为.nc格式(NETCDF DATA),如下
在这里插入图片描述
可以使用ArcMap的多维工具的“创建NetCDF栅格图层”的工具来打开,叠加一个全国的省界,可以看到这个数据是四川的某个数据
在这里插入图片描述
现在使用NetCDF4和gdal来处理这个文件夹中的459个.nc文件,转为栅格图像
在这里插入图片描述
使用NetCDF4读取一个nc文件,可以看到是这样的
在这里插入图片描述
其中variables是它的值,有经纬度(坐标)和一个TAIR的值(灰度)
下面pip好NetCDF4和gdal两个包,开始写一个处理的py文件

import netCDF4
from osgeo import gdal
import numpy as np
import os

# 读取一个nc文件转换为栅格
def read_nc_to_tif(nc_path, out_path):
    # 读取nc数据保存为字典
    dataset = netCDF4.Dataset(nc_path)  # 打开一个nc文件
    keys = dataset.variables.keys()  # 获取它的值的列表
    dicts = {}
    for key in keys:
        dicts[key] = np.array(dataset[key])  # 保存为字典
    # 创建栅格数据
    driver = gdal.GetDriverByName("GTiff")  # 新建一个空的tif
    _, file_name = os.path.split(nc_path)  # 得到nc文件的文件名
    outdata = driver.Create(
        os.path.join(out_path, (file_name.split('.')[0]+'.tif')),  # 要保存的tif文件名
        dicts['LON'].shape[0],  # x的size
        dicts['LAT'].shape[0],  # y的size
        len(list(dicts.keys()))-2,  # 波段数(除去经纬度其他的都是波段)
        gdal.GDT_Float32  # 类型,这里的这些文件都是float32的,其他的根据实际情况改
    )
    # 计算转换矩阵
    pos_x = dicts['LON'].min()
    pos_y = dicts['LAT'].min()
    pix_x = (dicts['LON'].max() - pos_x) / dicts['LON'].shape[0]
    pix_y = (dicts['LAT'].max() - pos_y) / dicts['LAT'].shape[0]
    outdata.SetGeoTransform((pos_x, pix_x, 0, pos_y, 0, pix_y))
    # 设置投影为WGS84
    proj_str = 'GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433],AUTHORITY["EPSG",4326]]'
    outdata.SetProjection(proj_str)
    # 投影和转换根据实际情况
    idx = 0  # 波段计数
    for ikey in dicts.keys():
        if ikey != 'LON' and ikey != 'LAT':  # 经纬度不用于产生新的波段
            outband = outdata.GetRasterBand(idx+1)  # 波段加1
            # print(str(idx), ikey)
            outband.WriteArray(dicts[ikey].astype('float32'))  # 写入数据
            idx += 1
    outdata.FlushCache()
    outdata = None
    print(nc_path, ' Finished')
    
# 主程序
if __name__ == '__main__':
    # 输入nc文件文件夹
    data_path = 'E:/XXXXXXX/NC_20201216_0950'
    # 输出栅格文件夹
    output_path = 'E:/XXXXXXX/results'
    # 处理流程
    ncs = os.listdir(data_path)
    for nc in ncs:
        nc_path = os.path.join(data_path, nc)
        read_nc_to_tif(nc_path, output_path)
    print('All Done!')

接下来运行脚本,即可在results文件夹下得到tif文件,但是看起来是一片空白
在这里插入图片描述
没事,因为是float32的类型,拖入ArcMap中,没有问题,和直接导入的完全重合,数值也一样,黑白还是彩色去显示设置设置一下即可
在这里插入图片描述

<think>嗯,用户想下载GRB2格式的气象数据,我需要先理清楚GRB2是什么,以及相关的数据来源和下载方法。根据提供的引用,GRB2应该是GRIB2格式的另一种说法,可能是指中国国家气象信息中心使用的特定数据格式。比如引用[3]提到,GRB2格式的文件包括CMPAS降水融合资料、HRCLDAS陆面融合实况资料等,这些可能是中国国内的气象数据产品。 首先,用户可能需要知道从哪里获取这些数据。根据引用[1]和[3],GRIB数据是气象领域的标准格式,而中国的国家气象信息中心可能提供了这些数据的下载途径。需要查看是否有官方网站或者数据共享平台提供公开访问。例如,中国气象数据网(http://data.cma.cn)可能是主要的来源,但需要注册和审核。 另外,用户可能还需要国际上的数据源,比如欧洲中期天气预报中心(ECMWF)提供的ERA5数据,这些数据通常以GRIB格式存储。引用[2]提到ERA5数据作为例子,所以可能需要指导用户访问ECMWF的气候数据存储(CDS)或其他平台。同时,美国的NCEP也可能提供类似的数据。 接下来,下载方法可能包括使用网页界面、API或特定工具。例如,CDS提供了通过Python脚本下载数据的方式,而国家气象信息中心的数据可能需要通过他们的平台手动下载或者使用特定的API。引用[4]中的Java代码示例说明用户可能有编程需求,所以可能需要介绍如何使用工具如ecCodes库来解析和处理下载的数据。 此外,用户可能需要了解如何选择正确的数据集,比如CMPAS、HRCLDAS等,这些数据集对应的变量和时间分辨率可能不同。需要指导用户如何在这些数据集中找到所需的GRB2文件。 还需要考虑权限问题,比如某些数据可能需要申请权限或仅限于学术研究使用。引用[3]和[4]提到的是国家气象信息中心的数据,可能需要用户拥有相应的账户和权限才能下载。 最后,可能需要推荐一些工具,如wgrib2、CDO、Panoply等,帮助用户验证和处理下载的数据。确保用户下载后的文件能够正确读取和使用。</think>### 如何下载GRB2格式的气象数据? #### 1. **数据来源** GRB2(GRIB2)格式的气象数据主要通过以下渠道获取: - **中国国家气象信息中心**:提供CMPAS降水融合资料、HRCLDAS陆面融合实况资料等GRB2格式数据,需注册并通过审核后下载[^3]。 - **欧洲中期天气预报中心(ECMWF)**:提供ERA5再分析数据(GRIB2格式),可通过其气候数据存储库(CDS)免费获取[^2]。 - **美国国家环境预报中心(NCEP)**:发布全球气象再分析数据(如GFS、GEFS),部分数据支持GRIB2格式下载。 #### 2. **下载步骤** ##### **中国国家气象信息中心** 1. **注册账户**:访问[中国气象数据网](http://data.cma.cn),完成实名注册和审核。 2. **查找数据集**:搜索“CMPAS”“HRCLDAS”“CLDAS”等关键词,进入对应数据页面。 3. **选择时间和变量**:根据需求选择时间范围、空间分辨率(如0.05°×0.05°)及气象要素(如降水、温度)。 4. **下载数据**:确认后通过FTP或HTTP方式下载GRB2文件[^3]。 ##### **ECMWF ERA5数据** 1. **访问CDS官网**:登录[Climate Data Store](https://cds.climate.copernicus.eu)。 2. **检索数据**:搜索“ERA5”并选择单层或压力层数据。 3. **配置参数**:设置时间、区域、变量(如风速、温度)及格式为GRIB。 4. **提交请求**:生成API脚本或直接下载,数据准备完成后自动推送[^2]。 ##### **NCEP数据** 1. **访问NCEP数据库**:进入[NOMADS](https://nomads.ncep.noaa.gov)或[NCAR RDA](https://rda.ucar.edu)。 2. **选择数据集**:例如GFS 0.25°预报数据。 3. **下载GRB2文件**:通过网页目录或命令行工具(如`wget`)批量获取。 #### 3. **工具推荐** - **数据查看**:使用`wgrib2`或Panoply验证文件内容。 - **批量下载**:通过CDS API或Python脚本自动化任务(示例代码): ```python import cdsapi c = cdsapi.Client() c.retrieve('reanalysis-era5-single-levels', { 'product_type': 'reanalysis', 'format': 'grib', 'variable': '2m_temperature', 'year': '2023', 'month': '01', 'day': '01', 'time': '12:00' }, 'download.grb2') ``` #### 4. **注意事项** - **权限限制**:部分数据需申请使用权限(如中国气象数据网)。 - **数据量控制**:GRB2文件较大,建议按区域或时间分块下载。 - **解码工具**:使用ECMWF ecCodes或Java工具解析数据(参考[^4])。
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值