python中的netCDF4批量處理NC文件的操作方法
一、使用ArcMap提取出第一期數(shù)據(jù)
1.使用工具箱中的“Make NetCDF Raster Layer”工具,提取出一個數(shù)據(jù)
可以發(fā)現(xiàn)該數(shù)據(jù)有正確的像元大小、坐標系等
2.導(dǎo)出該數(shù)據(jù)作為標準數(shù)據(jù)
二、使用python批量提取所有數(shù)據(jù)
1. 查看數(shù)據(jù)屬性
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為經(jīng)緯度,time為時間,Runoff
為需要的結(jié)果
2.批量導(dǎo)出結(jié)果
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 #柵格矩陣的列數(shù) im_height = raster.RasterYSize #柵格矩陣的行數(shù) im_bands = raster.RasterCount #波段數(shù) 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 # 創(chuàng)建文件 driver = gdal.GetDriverByName("GTiff") dataset = driver.Create(path, im_width, im_height, im_bands, datatype) if (dataset != None): dataset.SetGeoTransform(im_geotrans) # 寫入仿射變換參數(shù) 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.根據(jù)需要處理缺失值
到此這篇關(guān)于python的netCDF4批量處理NC格式文件的操作方法的文章就介紹到這了,更多相關(guān)python netCDF4處理NC格式文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python命令行參數(shù)argparse模塊基本用法詳解
argparse?是python自帶的命令行參數(shù)解析包,可以用來方便地讀取命令行參數(shù),這篇文章主要介紹了python命令行參數(shù)-argparse模塊基本用法,需要的朋友可以參考下2023-01-01Python Paramiko實現(xiàn)SSHv2協(xié)議輕松管理遠程服務(wù)器
這篇文章主要為大家介紹了Python Paramiko實現(xiàn)SSHv2協(xié)議輕松管理遠程服務(wù)器,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2024-01-01