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访问类中docstring注释的实现方法
May 04 Python
Python 使用os.remove删除文件夹时报错的解决方法
Jan 13 Python
Django 限制用户访问频率的中间件的实现
Aug 23 Python
对Python 窗体(tkinter)树状数据(Treeview)详解
Oct 11 Python
利用pyuic5将ui文件转换为py文件的方法
Jun 19 Python
python3.6生成器yield用法实例分析
Aug 23 Python
python3实现微型的web服务器
Sep 03 Python
python性能测量工具cProfile使用解析
Sep 26 Python
python生成特定分布数的实例
Dec 05 Python
PyCharm如何导入python项目的方法
Feb 06 Python
python集成开发环境配置(pycharm)
Feb 14 Python
详解python使用金山词霸的翻译功能(调试工具断点的使用)
Jan 07 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
source.php查看源文件
2006/12/09 PHP
PHP session会话操作技巧小结
2016/09/27 PHP
PHP简单实现图片格式转换(jpg转png,gif转png等)
2019/10/30 PHP
JQUERY THICKBOX弹出层插件
2008/08/30 Javascript
一些常用的JavaScript函数(json)附详细说明
2011/05/25 Javascript
Javascript 键盘事件的组合使用实现代码
2012/05/04 Javascript
用JavaScript修改CSS属性的代码
2013/05/06 Javascript
jquery的attr方法禁用表单元素禁用输入内容
2014/06/23 Javascript
Node.js中创建和管理外部进程详解
2014/08/16 Javascript
js行号显示的文本框实现效果(兼容多种浏览器 )
2015/10/23 Javascript
Bootstrap表单布局样式源代码
2016/07/04 Javascript
jQuery 3.0十大新特性最终版发布
2016/07/14 Javascript
angular分页指令操作
2017/01/09 Javascript
jQuery插件HighCharts实现的2D对数饼图效果示例【附demo源码下载】
2017/03/09 Javascript
JavaScript实现跟随滚动缓冲运动广告框
2017/07/15 Javascript
JavaScript模块详解
2017/12/18 Javascript
vue组件间的参数传递实例详解
2019/04/26 Javascript
js设置鼠标悬停改变背景色实现详解
2019/06/26 Javascript
jQuery实现input[type=file]多图预览上传删除等功能
2019/08/02 jQuery
压缩Vue.js打包后的体积方法总结(Vue.js打包后体积过大问题)
2020/02/03 Javascript
vue使用video插件vue-video-player的示例
2020/10/03 Javascript
jQuery冲突问题解决方法
2021/01/19 jQuery
python下读取公私钥做加解密实例详解
2017/03/29 Python
用Django实现一个可运行的区块链应用
2018/03/08 Python
Python 比较文本相似性的方法(difflib,Levenshtein)
2018/10/15 Python
python实现文件的分割与合并
2019/08/29 Python
python实现大学人员管理系统
2019/10/25 Python
Python读取文件内容为字符串的方法(多种方法详解)
2020/03/04 Python
python3 sleep 延时秒 毫秒实例
2020/05/04 Python
python实现启动一个外部程序,并且不阻塞当前进程
2020/12/05 Python
光声世纪笔试题目
2012/08/25 面试题
综合实践教学反思
2014/01/31 职场文书
校车安全责任书
2014/08/25 职场文书
会计简历自我评价
2015/03/10 职场文书
2016年综治宣传月活动宣传标语口号
2016/03/16 职场文书
Python+tkinter实现高清图片保存
2022/03/13 Python