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中最常用的操作列表的几种方法归纳
Apr 24 Python
python实现判断数组是否包含指定元素的方法
Jul 15 Python
详解tensorflow实现迁移学习实例
Feb 10 Python
关于django 数据库迁移(migrate)应该知道的一些事
May 27 Python
python输出100以内的质数与合数实例代码
Jul 08 Python
python调用动态链接库的基本过程详解
Jun 19 Python
Django中create和save方法的不同
Aug 13 Python
Python Numpy,mask图像的生成详解
Feb 19 Python
浅谈Python的方法解析顺序(MRO)
Mar 05 Python
Django models文件模型变更错误解决
May 11 Python
Python读写压缩文件的方法
Jul 30 Python
python excel多行合并的方法
Dec 09 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
php 无限级缓存的类的扩展
2009/03/16 PHP
PHP取余函数介绍MOD(x,y)与x%y
2014/05/15 PHP
PHP 面向对象程序设计(oop)学习笔记 (二) - 静态变量的属性和方法及延迟绑定
2014/06/12 PHP
Yii2数据库操作常用方法小结
2017/05/04 PHP
PHP单元测试框架PHPUnit用法详解
2019/01/23 PHP
jQuery示例收集
2010/11/05 Javascript
js 上传图片预览问题
2010/12/06 Javascript
jquery 查找select ,并触发事件的实现代码
2011/03/30 Javascript
文本域光标操作的jQuery扩展分享
2014/03/10 Javascript
JS提交form表单实例分析
2015/12/10 Javascript
实例代码详解javascript实现窗口抖动及qq窗口抖动
2016/01/04 Javascript
js判断iframe中元素是否存在的实现代码
2016/12/24 Javascript
微信小程序 动画的简单实例
2017/10/12 Javascript
Vue.js进阶知识点总结
2018/04/01 Javascript
vue底部加载更多的实例代码
2018/06/29 Javascript
基于vue循环列表时点击跳转页面的方法
2018/08/31 Javascript
vuex存储复杂参数(如对象数组等)刷新数据丢失的解决方法
2019/11/05 Javascript
Vue中fragment.js使用方法小结
2020/02/17 Javascript
js+css实现全屏侧边栏
2020/06/16 Javascript
[02:37]2018DOTA2亚洲邀请赛赛前采访 VP.no[o]ne心中最强SOLO是谁
2018/04/04 DOTA
[59:48]LGD vs IG 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python数据抓取爬虫代理防封IP方法
2018/12/23 Python
在python下读取并展示raw格式的图片实例
2019/01/24 Python
python设置环境变量的作用和实例
2019/07/09 Python
python用线性回归预测股票价格的实现代码
2019/09/04 Python
pytorch的batch normalize使用详解
2020/01/15 Python
python中的 zip函数详解及用法举例
2020/02/16 Python
Django实现任意文件上传(最简单的方法)
2020/06/03 Python
HTML5自定义元素播放焦点图动画的实现
2019/09/25 HTML / CSS
精选干货:Java精选笔试题附答案
2014/01/18 面试题
三个儿子教学反思
2014/02/03 职场文书
2014年实验室工作总结
2014/12/03 职场文书
python迷宫问题深度优先遍历实例
2021/06/20 Python
springboot临时文件存储目录配置方式
2021/07/01 Java/Android
Python编程super应用场景及示例解析
2021/10/05 Python
一文搞懂Java中的注解和反射
2022/06/21 Java/Android