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内置的模块与函数进行不同进制的数的转换
Mar 12 Python
Python运维自动化之nginx配置文件对比操作示例
Aug 29 Python
Python学习笔记之lambda表达式用法详解
Aug 08 Python
python代码打印100-999之间的回文数示例
Nov 24 Python
对python中 math模块下 atan 和 atan2的区别详解
Jan 17 Python
python框架Django实战商城项目之工程搭建过程图文详解
Mar 09 Python
django实现模型字段动态choice的操作
Apr 01 Python
基于matplotlib xticks用法详解
Apr 16 Python
Python基于xlrd模块处理合并单元格
Jul 28 Python
Django项目创建及管理实现流程详解
Oct 13 Python
python 下划线的不同用法
Oct 24 Python
Python文件名匹配与文件复制的实现
Dec 11 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大文件分片上传的实现方法
2018/10/28 PHP
鼠标图片振动代码
2006/07/06 Javascript
js判断变量是否未定义的代码
2020/03/28 Javascript
jquery实现每个数字上都带进度条的幻灯片
2013/02/20 Javascript
jQuery之过滤元素操作小结
2013/11/30 Javascript
jQuery中的val()示例应用
2014/02/26 Javascript
javascript实现鼠标放上后下边对应内容变换的效果
2015/08/06 Javascript
javascript判断网页是关闭还是刷新
2015/09/12 Javascript
AngularJs Understanding the Model Component
2016/09/02 Javascript
js前端解决跨域问题的8种方案(最新最全)
2016/11/18 Javascript
js按条件生成随机json:randomjson实现方法
2017/04/07 Javascript
Vue 滚动行为的具体使用方法
2017/09/13 Javascript
使用puppeteer爬取网站并抓出404无效链接
2018/12/20 Javascript
[55:45]LGD vs OG 2019国际邀请赛淘汰赛 胜者组 BO3 第三场 8.24
2019/09/10 DOTA
Python实现将绝对URL替换成相对URL的方法
2015/06/28 Python
玩转python selenium鼠标键盘操作(ActionChains)
2020/04/12 Python
Django 2.0版本的新特性抢先看!
2018/01/05 Python
python爬虫爬取某站上海租房图片
2018/02/04 Python
基于Pandas读取csv文件Error的总结
2018/06/15 Python
一行Python代码过滤标点符号等特殊字符
2019/08/12 Python
django重新生成数据库中的某张表方法
2019/08/28 Python
Python selenium键盘鼠标事件实现过程详解
2020/07/28 Python
Python正则re模块使用步骤及原理解析
2020/08/18 Python
深入分析python 排序
2020/08/24 Python
记一次python 爬虫爬取深圳租房信息的过程及遇到的问题
2020/11/24 Python
HTML5移动端开发遇见的东西
2019/10/11 HTML / CSS
浅析HTML5中的download属性使用
2019/03/13 HTML / CSS
英国最大的经认证的有机超市:Planet Organic
2018/02/02 全球购物
Myprotein荷兰官网:欧洲第一运动营养品牌
2020/07/11 全球购物
英国名牌男装店:Standout
2021/02/17 全球购物
新媒传信软件测试面试题
2013/02/24 面试题
电工技术比武方案
2014/05/11 职场文书
大学生国庆节65周年演讲稿范文
2014/09/25 职场文书
计算机教师工作总结
2015/08/13 职场文书
详解如何修改nginx的默认端口
2021/03/31 Servers
Python网络编程之ZeroMQ知识总结
2021/04/25 Python