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脚本内运行linux命令的方法
Jul 02 Python
python实现决策树
Dec 21 Python
Python检测网络延迟的代码
May 15 Python
Python实现获取邮箱内容并解析的方法示例
Jun 16 Python
python实现列表中由数值查到索引的方法
Jun 27 Python
对python修改xml文件的节点值方法详解
Dec 24 Python
详解python路径拼接os.path.join()函数的用法
Oct 09 Python
TensorFlow梯度求解tf.gradients实例
Feb 04 Python
Python转换itertools.chain对象为数组的方法
Feb 07 Python
浅谈python输出列表元素的所有排列形式
Feb 26 Python
使用python批量修改XML文件中图像的depth值
Jul 22 Python
Python操控mysql批量插入数据的实现方法
Oct 27 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开发框架总结收藏
2008/04/24 PHP
php+mysql实现无限分类实例详解
2015/01/15 PHP
php延迟静态绑定实例分析
2015/02/08 PHP
WordPress开发中的get_post_custom()函数使用解析
2016/01/04 PHP
详解WordPress中添加友情链接的方法
2016/05/21 PHP
微信公众号判断用户是否已关注php代码解析
2016/06/24 PHP
phpinfo()中Loaded Configuration File(none)的解决方法
2017/01/16 PHP
Javascript脚本实现静态网页加密实例代码
2013/11/05 Javascript
javascript计算用户打开网页的停留时间
2014/01/09 Javascript
javascript计算星座属相(十二生肖属相)示例代码
2014/01/09 Javascript
Jquery仿IGoogle实现可拖动窗口示例代码
2014/08/22 Javascript
js判断是否按下了Shift键的方法
2015/01/27 Javascript
js实现浏览器窗口大小被改变时触发事件的方法
2015/02/02 Javascript
Vue CLI3搭建的项目中路径相关问题的解决
2018/09/17 Javascript
Vue数据绑定实例写法
2019/08/06 Javascript
微信小程序 textarea 层级过高问题简单解决方案
2019/10/14 Javascript
package.json中homepage属性的作用详解
2020/03/11 Javascript
解决vue+webpack项目接口跨域出现的问题
2020/08/10 Javascript
vue.js封装switch开关组件的操作
2020/10/26 Javascript
react+antd 递归实现树状目录操作
2020/11/02 Javascript
[01:13:59]LGD vs Mineski Supermajor 胜者组 BO3 第三场 6.5
2018/06/06 DOTA
Python中的Numpy入门教程
2014/04/26 Python
python机器学习实战之K均值聚类
2017/12/20 Python
python实现大转盘抽奖效果
2019/01/22 Python
python新式类和经典类的区别实例分析
2020/03/23 Python
PyQt5中QSpinBox计数器的实现
2021/01/18 Python
基于html5实现的图片墙效果
2014/10/16 HTML / CSS
彪马美国官网:PUMA美国
2017/03/09 全球购物
DC Shoes俄罗斯官网:美国滑板鞋和服饰品牌
2020/08/19 全球购物
汽车销售顾问求职自荐信
2014/01/01 职场文书
物流合作计划书
2014/01/10 职场文书
趣味体育活动方案
2014/02/08 职场文书
银行领导班子四风对照检查材料
2014/09/27 职场文书
2014年建筑工作总结
2014/11/26 职场文书
员工手册编写范本
2015/05/14 职场文书
2019入党申请书格式
2019/06/25 职场文书