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访问MySQL封装的常用类实例
Nov 11 Python
Python列表(list)常用操作方法小结
Feb 02 Python
Python找出9个连续的空闲端口
Feb 01 Python
Python实现处理逆波兰表达式示例
Jul 30 Python
一篇文章搞懂Python的类与对象名称空间
Dec 10 Python
python:接口间数据传递与调用方法
Dec 17 Python
BP神经网络原理及Python实现代码
Dec 18 Python
使用k8s部署Django项目的方法步骤
Jan 14 Python
解决python的空格和tab混淆而报错的问题
Feb 26 Python
Python的collections模块真的很好用
Mar 01 Python
pygame面向对象的飞行小鸟实现(Flappy bird)
Apr 01 Python
Python GUI编程之tkinter 关于 ttkbootstrap 的使用详解
Mar 03 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
第九节 绑定 [9]
2006/10/09 PHP
使用php来实现网络服务
2009/09/15 PHP
php echo()和print()、require()和include()函数区别说明
2010/03/27 PHP
php 检查电子邮件函数(自写)
2014/01/16 PHP
用js实现上传图片前的预览(TX的面试题)
2007/08/14 Javascript
通过AJAX的JS、JQuery两种方式解析XML示例介绍
2013/09/23 Javascript
jQuery获取Radio,CheckBox选择的Value值(示例代码)
2013/12/12 Javascript
jQuery的观察者模式详解
2014/12/22 Javascript
JavaScript中数据结构与算法(三):链表
2015/06/19 Javascript
javascript实现简单的进度条
2015/07/02 Javascript
javascript中$(function() {});写与不写有哪些区别
2015/08/10 Javascript
Javascript 5种方法实现过滤删除前后所有空格
2016/06/22 Javascript
jquery实现全选、全不选以及单选功能
2017/03/23 jQuery
react.js CMS 删除功能的实现方法
2017/04/17 Javascript
使用cropper.js裁剪头像的实例代码
2017/09/29 Javascript
Vue组件的使用教程详解
2018/01/05 Javascript
JS声明对象时属性名加引号与不加引号的问题及解决方法
2018/02/16 Javascript
小程序实现列表多个批量倒计时
2021/01/29 Javascript
优雅的将ElementUI表格变身成树形表格的方法步骤
2019/04/11 Javascript
Vue性能优化的方法
2020/07/30 Javascript
python实现用户管理系统
2018/01/10 Python
Python通过属性手段实现只允许调用一次的示例讲解
2018/04/21 Python
pycharm 实现本地写代码,服务器运行的操作
2020/06/08 Python
HTML5 Canvas中绘制矩形实例
2015/01/01 HTML / CSS
德国圣伯纳德草药屋:Kräuterhaus Sanct Bernhard(有中文站)
2018/08/05 全球购物
DOUGLAS荷兰:购买香水和化妆品
2020/10/24 全球购物
写clone()方法时,通常都有一行代码,是什么?
2012/10/31 面试题
学前教育毕业生自荐信
2013/10/29 职场文书
硕士生工作推荐信
2014/03/07 职场文书
亚运会口号
2014/06/20 职场文书
2014最新党员违纪检讨书
2014/10/12 职场文书
师范生见习报告范文
2014/11/03 职场文书
十七岁的单车观后感
2015/06/12 职场文书
2016年暑假家长对孩子评语
2015/12/01 职场文书
看看如何用Python绘制小米新版天价logo
2021/04/20 Python
Python制作表白爱心合集
2022/01/22 Python