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

处理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中,没有问题,和直接导入的完全重合,数值也一样,黑白还是彩色去显示设置设置一下即可
在这里插入图片描述

  • 6
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 17
    评论
Casia-OLHWDB是一个手写字数据集,其中包含来自不同作者的手写数字、字母和汉字。这个数据集的文件解析可以通过以下步骤进行。 1. 下载Casia-OLHWDB数据文件。你可以在官方网站上找到该数据集并下载。解压缩下载的文件。 2. 了解数据文件结构。Casia-OLHWDB数据集使用一种简单的文件格式来存储手写字样本。数据文件通常以“.txt”或“.pkl”为扩展名。你可以查看数据集文档以了解具体的文件结构和格式。 3. 打开数据文件。使用Python文件读取函数打开数据文件。如果文件是文本文件,可以使用“open”函数读取。如果文件是二进制文件,则可以使用适当的库(如NumPy或Pandas)来读取。 4. 解析数据文件内容。根据数据文件的结构和格式,你需要编写代码来解析文件内容。这通常涉及读取文件中的每一行,并将其分解为适当的数据结构(如数组、字典或数据帧)。 5. 提取手写字样本。在解析文件内容后,你可以提取手写字样本。这些样本可以是图像、矢量图、像素数组或其他形式的数据。你可以根据需要对这些样本进行处理和转换。 6. 进一步处理和分析。一旦你解析并提取了手写字样本,你可以对数据进行进一步的处理和分析。这可能包括图像增强、特征提取、机器学习模型训练等。 总之,Casia-OLHWDB数据文件解析涉及下载数据文件,了解文件结构和格式,打开文件解析文件内容,并提取手写字样本。通过这些步骤,你可以开始使用这个数据集进行手写字识别、字形分析或其他相关任务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值