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连接远程ftp服务器并列出目录下文件的方法
Apr 01 Python
在Python程序中实现分布式进程的教程
Apr 28 Python
实例说明Python中比较运算符的使用
May 13 Python
浅析Python 中整型对象存储的位置
May 16 Python
Python中实现switch功能实例解析
Jan 11 Python
Python字典及字典基本操作方法详解
Jan 30 Python
关于Tensorflow中的tf.train.batch函数的使用
Apr 24 Python
Python面向对象之类的内置attr属性示例
Dec 14 Python
Python OpenCV 调用摄像头并截图保存功能的实现代码
Jul 02 Python
python UDP(udp)协议发送和接收的实例
Jul 22 Python
django框架两个使用模板实例
Dec 11 Python
Python3.9.1中使用match方法详解
Feb 08 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
搜索引擎技术核心揭密
2006/10/09 PHP
CI框架在CLI下执行占用内存过大问题的解决方法
2014/06/17 PHP
ThinkPHP调用百度翻译类实现在线翻译
2014/06/26 PHP
php中执行系统命令的方法
2015/03/21 PHP
php+html5基于websocket实现聊天室的方法
2015/07/17 PHP
PHP防止刷新重复提交页面的示例代码
2015/11/11 PHP
PHP编程基本语法快速入门手册
2016/01/07 PHP
修复ie8&amp;chrome下window的resize事件多次执行
2011/10/20 Javascript
利用js正则表达式验证手机号,email地址,邮政编码
2014/01/23 Javascript
jQuery之ajax删除详解
2014/02/27 Javascript
jQuery插件windowScroll实现单屏滚动特效
2015/07/14 Javascript
JS实现黑色风格的网页TAB选项卡效果代码
2015/10/09 Javascript
jQuery中JSONP的两种实现方式详解
2016/09/26 Javascript
vue使用watch 观察路由变化,重新获取内容
2017/03/08 Javascript
ES6 Promise对象概念与用法分析
2017/04/01 Javascript
AngularJS实现图片上传和预览功能的方法分析
2017/11/08 Javascript
详解为Bootstrap Modal添加拖拽的方法
2018/01/05 Javascript
关于jquery layui弹出层的使用方法
2018/04/21 jQuery
[38:44]DOTA2上海特级锦标赛A组小组赛#2 Secret VS CDEC第二局
2016/02/25 DOTA
用python + hadoop streaming 分布式编程(一) -- 原理介绍,样例程序与本地调试
2014/07/14 Python
python通过索引遍历列表的方法
2015/05/04 Python
利用Python脚本生成sitemap.xml的实现方法
2017/01/31 Python
python如何为被装饰的函数保留元数据
2018/03/21 Python
python开启摄像头以及深度学习实现目标检测方法
2018/08/03 Python
Python 串口读写的实现方法
2019/06/12 Python
Python常用数字处理基本操作汇总
2020/09/10 Python
AmazeUI中各种的导航式菜单与解决方法
2020/08/19 HTML / CSS
大学生毕业求职的自我评价
2013/09/29 职场文书
学校文明单位申报材料
2014/05/06 职场文书
六一儿童节演讲稿
2014/05/23 职场文书
2015年社区综治宣传月活动总结
2015/03/25 职场文书
2015年度物流工作总结
2015/04/30 职场文书
感恩的心主题班会
2015/08/12 职场文书
村官2015年度工作总结
2015/10/14 职场文书
基于Redis结合SpringBoot的秒杀案例详解
2021/10/05 Redis
浅谈MySQL表空间回收的正确姿势
2021/10/05 MySQL