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程序与系统shell交互的方式
Apr 09 Python
Python生成不重复随机值的方法
May 11 Python
解决python3 urllib 链接中有中文的问题
Jul 16 Python
Python中asyncio与aiohttp入门教程
Oct 16 Python
Python编程flask使用页面模版的方法
Dec 28 Python
Python嵌套式数据结构实例浅析
Mar 05 Python
Python3 执行Linux Bash命令的方法
Jul 12 Python
Python使用指定端口进行http请求的例子
Jul 25 Python
python3 实现调用串口功能
Dec 26 Python
解决Python 写文件报错TypeError的问题
Oct 23 Python
python推导式的使用方法实例
Feb 28 Python
深度学习tensorflow基础mnist
Apr 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
php include,include_once,require,require_once
2008/09/05 PHP
解析php中反射的应用
2013/06/18 PHP
PHP实现163邮箱自动发送邮件
2016/03/29 PHP
php学习笔记之字符串常见操作总结
2019/07/16 PHP
PHP中的自动加载操作实现方法详解
2019/08/06 PHP
PHP使用phpunit进行单元测试示例
2019/09/23 PHP
node.js chat程序如何实现Ajax long-polling长链接刷新模式
2012/03/13 Javascript
Android中的jQuery:AQuery简介
2014/05/06 Javascript
jQuery实现仿Alipay支付宝首页全屏焦点图切换特效
2015/05/04 Javascript
javascript将DOM节点添加到文档的方法实例分析
2015/08/04 Javascript
如何使用jquery easyui创建标签组件
2015/11/18 Javascript
JS正则RegExp.test()使用注意事项(不具有重复性)
2016/12/28 Javascript
js清除浏览器缓存的几种方法
2017/03/15 Javascript
基于Vue、Vuex、Vue-router实现的购物商城(原生切换动画)效果
2018/01/09 Javascript
vue 路由页面之间实现用手指进行滑动的方法
2018/02/23 Javascript
react-native-video实现视频全屏播放的方法
2018/03/19 Javascript
vue-cli脚手架的安装教程图解
2018/09/02 Javascript
angular中子控制器向父控制器传值的实例
2018/10/08 Javascript
webpack之引入图片的实现及问题
2018/10/08 Javascript
vue 实现搜索的结果页面支持全选与取消全选功能
2019/05/10 Javascript
vue-cli3跨域配置的简单方法
2019/09/06 Javascript
python 随机数生成的代码的详细分析
2011/05/15 Python
Python处理文本文件中控制字符的方法
2017/02/07 Python
Python基础教程之tcp socket编程详解及简单实例
2017/02/23 Python
基于并发服务器几种实现方法(总结)
2017/12/29 Python
微信跳一跳游戏python脚本
2020/04/01 Python
Python统计一个字符串中每个字符出现了多少次的方法【字符串转换为列表再统计】
2019/05/05 Python
python队列原理及实现方法示例
2019/11/27 Python
简单了解如何封装自己的Python包
2020/07/08 Python
解决Python 函数声明先后顺序出现的问题
2020/09/02 Python
Python模块常用四种安装方式
2020/10/20 Python
西班牙香水和化妆品连锁店:Druni
2019/05/05 全球购物
民主生活会对照检查材料范文
2014/10/01 职场文书
2015年幼儿园卫生保健工作总结
2015/05/12 职场文书
音乐研修感悟
2015/11/18 职场文书
redis实现共同好友的思路详解
2021/05/26 Redis