本篇文章小编给大家分享一下python的netCDF4批量处理NC格式文件代码操作方法,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看。
一、使用ArcMap提取出第一期数据
1.使用工具箱中的“Make NetCDF Raster Layer”工具,提取出一个数据
可以发现该数据有正确的像元大小、坐标系等
2.导出该数据作为标准数据
二、使用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)
输出为
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: [email protected]; [email protected]
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.根据需要处理缺失值
太极熊猫2百度版 安卓版v1.7.1
下载黎明觉醒应用宝版 安卓版v1.111.1
下载暗影格斗3国际版 (Shadow Fight 3)最新版v1.40.3
下载王者战魂华为版 安卓版v3.6.1
下载放置魔法学院免广告版 v2.9.5
放置魔法学院内置Mod菜单是游戏的破解版本,在该版本中为玩家
万乘之国qq版本 安卓版v1.0.5
万乘之国qq版本是一款极具魅力的策略游戏,玩家们可以通过不同
动物餐厅国际服无限内购版 v12.9
动物餐厅国际服免广告版是游戏的破解版本,在该版本中为玩家去除
欧洲卡车司机 安卓版v3.2
欧洲卡车司机是款模拟经营游戏,这款游戏的画面还是蛮逼真的,给
疯狂大酒店 (Grand Hotel Mania)最新中文版v4.10.0.20
疯狂大酒店(Grand Hotel Mania)是一款好玩的