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和C语言混合编程实例
Jun 04 Python
Python实现文件按照日期命名的方法
Jul 09 Python
centos6.4下python3.6.1安装教程
Jul 21 Python
利用python获取当前日期前后N天或N月日期的方法示例
Jul 30 Python
Python 多进程并发操作中进程池Pool的实例
Nov 01 Python
Python模块文件结构代码详解
Feb 03 Python
Python 读取指定文件夹下的所有图像方法
Apr 27 Python
Python+selenium实现自动循环扔QQ邮箱漂流瓶
May 29 Python
Python可视化mhd格式和raw格式的医学图像并保存的方法
Jan 24 Python
Python3中的最大整数和最大浮点数实例
Jul 09 Python
Django异步任务线程池实现原理
Dec 17 Python
python 利用百度API识别图片文字(多线程版)
Dec 14 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
模仿OSO的论坛(四)
2006/10/09 PHP
PHP代码优化之成员变量获取速度对比
2014/02/28 PHP
PHP调用Mailgun发送邮件的方法
2017/05/04 PHP
CodeIgniter框架钩子机制实现方法【hooks类】
2018/08/21 PHP
Thinkphp5.0框架视图view的循环标签用法示例
2019/10/12 PHP
JavaScript中几个重要的属性(this、constructor、prototype)介绍
2013/05/19 Javascript
jquery使用淘宝接口跨域查询手机号码归属地实例
2013/11/28 Javascript
jQuery基于ajax实现星星评论代码
2015/08/07 Javascript
javascript 中的console.log和弹出窗口alert
2016/08/30 Javascript
vue2.x 父组件监听子组件事件并传回信息的方法
2017/07/17 Javascript
vue实现图片加载完成前的loading组件方法
2018/02/05 Javascript
基于vue v-for 循环复选框-默认勾选第一个的实现方法
2018/03/03 Javascript
jquery实现点击弹出对话框
2020/02/08 jQuery
javascript 原型与原型链的理解及应用实例分析
2020/02/10 Javascript
vue表单验证之禁止input输入框输入空格
2020/12/03 Vue.js
[01:09]DOTA2次级职业联赛 - ishow.HMM战队宣传片
2014/12/01 DOTA
python去除文件中空格、Tab及回车的方法
2016/04/12 Python
简介Python的collections模块中defaultdict类型的用法
2016/07/07 Python
python中将函数赋值给变量时需要注意的一些问题
2017/08/18 Python
基于python的图片修复程序(实现水印去除)
2018/06/04 Python
解决Keras自带数据集与预训练model下载太慢问题
2020/06/12 Python
python collections模块的使用
2020/10/16 Python
意大利香水和彩妆护肤品购物网站:Ditano
2017/08/13 全球购物
美国演唱会和体育门票购买网站:Ticketnetwork
2018/10/19 全球购物
请问如下代码执行后a和b的值分别是什么
2016/05/05 面试题
程序员经常用到的UNIX命令
2015/04/13 面试题
西安交大自主招生自荐信
2014/01/27 职场文书
七匹狼男装广告词
2014/03/21 职场文书
小学网上祭英烈活动总结
2014/07/05 职场文书
处级领导干部四风问题自我剖析材料
2014/09/29 职场文书
审计局2014法制宣传日活动总结
2014/11/01 职场文书
质检员工作总结2015
2015/04/25 职场文书
卫生院义诊活动总结
2015/05/07 职场文书
如何用JS实现简单的数据监听
2021/05/06 Javascript
使用react-virtualized实现图片动态高度长列表的问题
2021/05/28 Javascript
html5调用摄像头实例代码
2021/06/28 HTML / CSS