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的内存泄漏及gc模块的使用分析
Jul 16 Python
Python实现发送email的几种常用方法
Aug 18 Python
在Python的gevent框架下执行异步的Solr查询的教程
Apr 16 Python
在Python中marshal对象序列化的相关知识
Jul 01 Python
Python使用面向对象方式创建线程实现12306售票系统
Dec 24 Python
Python 输出时去掉列表元组外面的方括号与圆括号的方法
Dec 24 Python
Python3调用百度AI识别图片中的文字功能示例【测试可用】
Mar 13 Python
创建Django项目图文实例详解
Jun 06 Python
Django Rest framework三种分页方式详解
Jul 26 Python
Django-imagekit的使用详解
Jul 06 Python
Python fileinput模块如何逐行读取多个文件
Oct 05 Python
Python 的 f-string 可以连接字符串与数字的原因解析
Feb 20 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 文章调用类代码
2011/08/11 PHP
PHP支付系统设计与典型案例分享
2016/08/02 PHP
PHP页面跳转实现延时跳转的方法
2016/12/10 PHP
PHP htmlspecialchars() 函数实例代码及用法大全
2018/09/18 PHP
PHP实现文件上传与下载
2020/08/28 PHP
JavaScript 指导方针
2007/04/05 Javascript
JS中数组Array的用法示例介绍
2014/02/20 Javascript
js 通过html()及text()方法获取并设置p标签的显示值
2014/05/14 Javascript
使用Chrome浏览器调试AngularJS应用的方法
2015/06/18 Javascript
JavaScript操作URL的相关内容集锦
2015/10/29 Javascript
利用ES6实现单例模式及其应用详解
2017/12/09 Javascript
详解webpack与SPA实践之开发环境搭建
2017/12/18 Javascript
vue axios请求超时的正确处理方法
2018/04/02 Javascript
webpack开发环境和生产环境的深入理解
2018/11/08 Javascript
JavaScript使用ul中li标签实现删除效果
2019/04/15 Javascript
微信小程序request请求封装,验签代码实例
2019/12/04 Javascript
优化Vue中date format的性能详解
2020/01/13 Javascript
vue自动添加浏览器兼容前后缀操作
2020/08/13 Javascript
pycharm 使用心得(八)如何调用另一文件中的函数
2014/06/06 Python
Python解析网页源代码中的115网盘链接实例
2014/09/30 Python
Python实现更改图片尺寸大小的方法(基于Pillow包)
2016/09/19 Python
Python 转义字符详细介绍
2017/03/21 Python
Python Socket实现简单TCP Server/client功能示例
2017/08/05 Python
Python 实现12306登录功能实例代码
2018/02/09 Python
计算机二级python学习教程(3) python语言基本数据类型
2019/05/16 Python
详解Python3之数据指纹MD5校验与对比
2019/06/11 Python
Python telnet登陆功能实现代码
2020/04/16 Python
Python json格式化打印实现过程解析
2020/07/21 Python
关于母亲节的感言
2014/02/04 职场文书
自荐信如何制作?
2014/02/21 职场文书
工程质量承诺书
2014/03/27 职场文书
2014公司党员自我评价范文
2014/09/11 职场文书
红色经典观后感
2015/06/18 职场文书
2016年秋季新学期致辞
2015/07/30 职场文书
写给汽车4S店的创业计划书,拿来即用!
2019/08/09 职场文书
在js中修改html body的样式
2021/11/11 Javascript