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 list使用示例 list中找连续的数字
Jan 27 Python
python获取元素在数组中索引号的方法
Jul 15 Python
Python元组操作实例分析【创建、赋值、更新、删除等】
Jul 24 Python
Python最火、R极具潜力 2017机器学习调查报告
Dec 11 Python
python实现转盘效果 python实现轮盘抽奖游戏
Jan 22 Python
python安装本地whl的实例步骤
Oct 12 Python
DJango的创建和使用详解(默认数据库sqlite3)
Nov 18 Python
python实现在多维数组中挑选符合条件的全部元素
Nov 26 Python
使用Python开发个京东上抢口罩的小实例(仅作技术研究学习使用)
Mar 10 Python
Python MOCK SERVER moco模拟接口测试过程解析
Apr 13 Python
python实现图片转字符画
Feb 19 Python
Python爬虫入门案例之爬取二手房源数据
Oct 16 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 手机归属地查询 api
2010/02/08 PHP
PHP自毁程序(慎用)
2015/07/09 PHP
PHP的Socket网络编程入门指引
2015/08/11 PHP
PHP判断FORM表单或URL参数来的数据是否为整数的方法
2016/03/25 PHP
关于 Laravel Redis 多个进程同时取队列问题详解
2017/12/25 PHP
PHP网页缓存技术优点及代码实例
2020/07/29 PHP
小议javascript 设计模式 推荐
2009/10/28 Javascript
两种WEB下的模态对话框 (asp.net或js的分别实现)
2009/12/02 Javascript
js鼠标点击图片切换效果代码分享
2015/08/26 Javascript
你有必要知道的25个JavaScript面试题
2015/12/29 Javascript
Js的Array数组对象详解
2016/02/22 Javascript
jquery操作ID带有变量的节点实例
2016/12/07 Javascript
微信小程序开发之animation循环动画实现的让云朵飘效果
2017/07/14 Javascript
jQuery使用zTree插件实现可拖拽的树示例
2017/09/23 jQuery
vue2.0 中使用transition实现动画效果使用心得
2018/08/13 Javascript
详解Nodejs get获取远程服务器接口数据
2019/03/26 NodeJs
socket在egg中的使用实例代码详解
2019/05/30 Javascript
js+HTML5 canvas 实现简单的加载条(进度条)功能示例
2019/07/16 Javascript
基于webpack4+vue-cli3项目实现换肤功能
2019/07/17 Javascript
vue+mock.js实现前后端分离
2019/07/24 Javascript
node.js基于dgram数据报模块创建UDP服务器和客户端操作示例
2020/02/12 Javascript
JavaScript 中判断变量是否为数字的示例代码
2020/10/22 Javascript
详解javascript脚本何时会被执行
2021/02/05 Javascript
[01:09:16]DOTA2-DPC中国联赛 正赛 SAG vs Dynasty BO3 第一场 1月25日
2021/03/11 DOTA
python uuid模块使用实例
2015/04/08 Python
一键搞定python连接mysql驱动有关问题(windows版本)
2016/04/23 Python
Python基于scipy实现信号滤波功能
2019/05/08 Python
Python利用FFT进行简单滤波的实现
2020/02/26 Python
Canvas 文本填充线性渐变的使用详解
2020/06/22 HTML / CSS
英国儿童设计师服装和玩具购物网站:Zac & Lulu
2020/10/19 全球购物
weblogic面试题
2016/03/07 面试题
元宵晚会主持词
2014/03/25 职场文书
孝敬父母的活动方案
2014/08/28 职场文书
2014年镇党建工作汇报材料
2014/11/02 职场文书
vue前端工程的搭建
2021/03/31 Vue.js
教你使用Pandas直接核算Excel中快递费用
2021/05/12 Python