python的netCDF4批量处理NC格式文件的操作方法


Posted in Python onMarch 21, 2022

一、使用ArcMap提取出第一期数据

1.使用工具箱中的“Make NetCDF Raster Layer”工具,提取出一个数据

python的netCDF4批量处理NC格式文件的操作方法

可以发现该数据有正确的像元大小、坐标系等

python的netCDF4批量处理NC格式文件的操作方法

python的netCDF4批量处理NC格式文件的操作方法

2.导出该数据作为标准数据

python的netCDF4批量处理NC格式文件的操作方法

二、使用python批量提取所有数据

1. 查看数据属性

from netCDF4 import Dataset,num2date
infile = "../01Data/Runoff1992-2014/GRUN_v1_GSWP3_WGS84_05_1902_2014.nc"
data_set = Dataset(infile) # 读取nc文件信息
print(data_set)

输出为

<class 'netCDF4._netCDF4.Dataset'>
root group (NETCDF3_CLASSIC data model, file format NETCDF3):
    title: GRUN
    version: GRUN 1.0
    meteorological_forcing: GSWP3
    temporal_resolution: monthly
    spatial_resolution: 0.5x0.5
    crs: WGS84
    proj4: +proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs
    EPSG: 4326
    references: Ghiggi et al.,2019. GRUN: An observation-based global gridded runoff dataset from 1902 to 2014. ESSD, doi: https://doi.org/10.5194/essd-2019-32
    authors: Gionata Ghiggi; Lukas Gudmundsson
    contacts: gionata.ghiggi@gmail.com; lukas.gudmundsson@env.ethz.ch
    institution: Land-Climate Dynamics, Institute for Atmospheric and Climate Science, ETH Zürich
    institution_id: IAC ETHZ
    dimensions(sizes): X(720), Y(360), time(1356)
    variables(dimensions): float64 X(X), float64 Y(Y), float64 time(time), float32 Runoff(time, Y, X)
    groups: 

可以看到variables变量X、Y为经纬度,time为时间,Runoff为需要的结果

2.批量导出结果

from osgeo import gdal
from netCDF4 import Dataset,num2date
import numpy as np

def WriteTiff(im_data,inputdir, path):
    raster = gdal.Open(inputdir)
    im_width = raster.RasterXSize #栅格矩阵的列数
    im_height = raster.RasterYSize #栅格矩阵的行数
    im_bands = raster.RasterCount #波段数
    im_geotrans = raster.GetGeoTransform()#获取仿射矩阵信息
    im_proj = raster.GetProjection()#获取投影信息
    
    if 'int8' in im_data.dtype.name:
        datatype = gdal.GDT_Byte
    elif 'int16' in im_data.dtype.name:
        datatype = gdal.GDT_UInt16
    else:
        datatype = gdal.GDT_Float32
    if len(im_data.shape) == 3:
        im_bands, im_height, im_width = im_data.shape
    elif len(im_data.shape) == 2:
        im_data = np.array([im_data])
        im_bands, (im_height, im_width) = 1, im_data.shape
        # 创建文件
    driver = gdal.GetDriverByName("GTiff")
    dataset = driver.Create(path, im_width, im_height, im_bands, datatype)
    if (dataset != None):
        dataset.SetGeoTransform(im_geotrans)  # 写入仿射变换参数
        dataset.SetProjection(im_proj)  # 写入投影
    for i in range(im_bands):
        dataset.GetRasterBand(i + 1).WriteArray(im_data[i])
    del dataset
infile = "../01Data/Runoff1992-2014/GRUN_v1_GSWP3_WGS84_05_1902_2014.nc"
data_set = Dataset(infile) # 读取nc文件信息
time = data_set.variables["time"][:]  # 获取时间一列
units = data_set.variables["time"].units # 获取第一期时间
#读取样本tif文件的地理信息
intif = "../03ProcessData/runoff_example.tif"
for i in range(0,len(time)):
    yr = num2date(time[i],units).year # 提取年份
    mon = num2date(time[i],units).month    # 提取月份
    value_data = data_set.variables['Runoff'][i]
    # 将缺失值改为0
    data = value_data.data
    mask = value_data.mask
    data[np.where(mask == True)] = 0
    outputname = "../01Data/Runoff1992-2014/tif/" + str(yr) + str(mon).zfill(2) + ".tif"
    WriteTiff(data,intif , outputname)
    print(outputname)

!注意事项

1.使用时候请自行修改修改输入输出文件路径与变量名称

2.根据需要处理缺失值

到此这篇关于python的netCDF4批量处理NC格式文件的操作方法的文章就介绍到这了,更多相关python netCDF4处理NC格式文件内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
详解Python中的序列化与反序列化的使用
Jun 30 Python
django模型层(model)进行建表、查询与删除的基础教程
Nov 21 Python
pyspark 读取csv文件创建DataFrame的两种方法
Jun 07 Python
Python XML转Json之XML2Dict的使用方法
Jan 15 Python
python判断文件是否存在,不存在就创建一个的实例
Feb 18 Python
Python常用的json标准库
Feb 19 Python
Numpy 中的矩阵求逆实例
Aug 26 Python
python 单线程和异步协程工作方式解析
Sep 28 Python
如何基于python实现归一化处理
Jan 20 Python
python用opencv完成图像分割并进行目标物的提取
May 25 Python
Python2手动安装更新pip过程实例解析
Jul 16 Python
Django后端按照日期查询的方法教程
Feb 28 Python
Python&Matlab实现灰狼优化算法的示例代码
Python学习之时间包使用教程详解
Mar 21 #Python
Python数据结构之队列详解
Python学习之os包使用教程详解
分享几种python 变量合并方法
Mar 20 #Python
python 使用tkinter与messagebox写界面和弹窗
Mar 20 #Python
python中的sys模块和os模块
Mar 20 #Python
You might like
在Zeus Web Server中安装PHP语言支持
2006/10/09 PHP
一篇有意思的技术文章php介绍篇
2010/10/26 PHP
浅析php数据类型转换
2014/01/09 PHP
详解WordPress开发中wp_title()函数的用法
2016/01/07 PHP
thinkPHP5框架auth权限控制类与用法示例
2018/06/12 PHP
PHP使用PDO实现mysql防注入功能详解
2019/12/20 PHP
Laravel 框架路由原理与路由访问实例分析
2020/04/14 PHP
jquery常用技巧及常用方法列表集合
2011/04/06 Javascript
FF火狐下获取一个元素同类型的相邻元素实现代码
2012/12/15 Javascript
innerHTML,outerHTML,innerText,outerText的用法及区别解析
2013/12/16 Javascript
js实现横向伸展开的二级导航菜单代码
2015/08/28 Javascript
Validform+layer实现漂亮的表单验证特效
2016/01/17 Javascript
JS获取元素多层嵌套思路详解
2016/05/16 Javascript
jQuery EasyUI学习教程之datagrid点击列表头排序
2016/07/09 Javascript
纯js实现手风琴效果代码
2020/04/17 Javascript
用iframe实现不刷新整个页面上传图片的实例
2016/11/18 Javascript
AJAX和jQuery动态加载数据的实现方法
2016/12/05 Javascript
jQuery Autocomplete简介_动力节点Java学院整理
2017/07/17 jQuery
vue 国际化 vue-i18n 双语言 语言包
2018/06/07 Javascript
详解vuex状态管理模式
2018/11/01 Javascript
Centos7 安装Node.js10以上版本的方法步骤
2019/10/15 Javascript
React Native登录之指纹登录篇的示例代码
2020/11/03 Javascript
关于better-scroll插件的无法滑动bug(2021通过插件解决)
2021/03/01 Javascript
Python数据结构与算法之完全树与最小堆实例
2017/12/13 Python
Python如何使用字符打印照片
2020/01/03 Python
利用python绘制数据曲线图的实现
2020/04/09 Python
Python简单实现词云图代码及步骤解析
2020/06/04 Python
浅谈Python描述数据结构之KMP篇
2020/09/06 Python
浅谈关于html5中图片抛物线运动的一些心得
2018/01/09 HTML / CSS
介绍一下Java的事务处理
2012/12/07 面试题
读书之星事迹材料
2014/05/12 职场文书
元旦联欢会策划方案
2014/06/11 职场文书
入股协议书范本
2014/11/01 职场文书
2014年学生党支部工作总结
2014/12/20 职场文书
网络营销计划
2015/01/17 职场文书
女性健康知识讲座通知
2015/04/23 职场文书