windows下气象grib/grib2数据转Tiff格式输出

材料:Win10+Python3.8+wgrib/wgrib2

①Grib/Grib2数据转为CSV/NC格式数据

什么是NC格式数据:

NC文件即NetCDF (Network Common Data Form),是一种通用的数据存储格式。广泛用于存储地学、大气科学、海洋科学等一系列多维数据,可封装时间、经度、纬度、降水、温度等多个维度数据,数据结构清晰易读,可以很方便的提取、应用。


说明:

windows下没有api可以直接读grib或者grib2的数据。可以下载wgrib或者wgrib2来读grib数据。wgrib可以读grib1格式(.grb)的数据,wgrib2可以读grib2格式(.grib)的数据。

下载工具:

wgrib,下载地址:ftp://ftp.cpc.ncep.noaa.gov/wd51we/wgrib
wgrib2,下载地址:ftp://ftp.cpc.ncep.noaa.gov/wd51we/wgrib2

嫌下载慢的,直接点这里下载wgrib2(win10-64位),提取码:barb


操作步骤: ①同时按下windows和R键,输入cmd,点击确定;

在这里插入图片描述
②输入wgrib2和待处理的数据,依据wgrib相关命令参数查看信息和处理;

这里介绍常用的几个命令:

1.-v0命令查看数据目录 【wgrib2.exe grib2数据 -v0】

wgrib2 grbfile -v0

在这里插入图片描述

2.-v命令查看属性【wgrib2.exe grib2数据 -v】

wgrib2 grbfile -v

在这里插入图片描述


3.采用匹配的方式,将grib2数据转换为.csv数据;
通过 -v命令查看目录可以看到有一个表示属性的字段“TMP”–温度;
新建一个csv文件以TMP作为字段名,使用 -match命令进行匹配;

在这里插入图片描述

存储为.csv格式命令【wgrib2.exe grib2数据 -match ‘TMP’ -csv csv存储路径】

wgrib2 grbfile -match 'TMP' -csv XX.csv

在这里插入图片描述

在这里插入图片描述


4.将grib2数据转换为.nc数据命令【wgrib2.exe grib2数据 -netcdf nc存储路径】

wgrib2 grbfile -netcdf xx.nc

在这里插入图片描述


②NC格式数据转为GeoTiff格式数据


Python处理nc文件需要用到的库:

netCDF4用于读取NC文件;
osgeo的子库gdal和osr,前者用于实现转换和栅格编辑功能,后者可用于确定地理坐标系和地图投影。


Python程序–查看NC文件信息

import netCDF4 as nc 
import numpy as np

item = r'C:/Users/T480/Desktop/nc/tmp.nc'#选取一个nc文件路径
data = nc.Dataset(item)

print(data) # 返回data的数据类型,<class 'netCDF4._netCDF4.Dataset'>
print('{:-<100}'.format('----'))

print(data.variables) # 了解变量的基本信息
print('{:-<100}'.format('----'))

for i in data.variables.keys():# 返回data中的变量名称
    print(i)
print('{:-<100}'.format('----'))

print(data.variables) # 了解变量的基本信息
print('{:-<100}'.format('----'))

print(data.variables['lon']) # 了解某一变量如“lon”(经度)的基本信息
print('{:-<100}'.format('----'))



Python程序–NC数据转GeoTiff数据

import netCDF4 as nc
import numpy as np
from osgeo import gdal,osr 
       
#读取数据值
item = r'C:/Users/T480/Desktop/nc/tmp.nc'#选取一个nc文件路径
outTif='C:/Users/T480/Desktop/tiff/tmp09.tif'#输出的tif文件路径

data = nc.Dataset(item)
lat= data.variables['latitude'][:]
lon= data.variables['longitude'][:]
time= data.variables['time'][:]
TMP_2maboveground=data.variables['TMP_2maboveground'][0,:,:]#即生成 某天 全纬度、经度范围 图像

TMP_2maboveground=np.asarray(TMP_2maboveground)-273.15#数据类型转换,开尔文温度转为摄氏温度
TMP_2maboveground[np.where(TMP_2maboveground == -33321)] = np.nan #异常值处理

#影像的空间坐标信息
LonMin,LatMax,LonMax,LatMin=[lon.min(),lat.max(),lon.max(),lat.min()]#左上和右下
Lon_Res=(LonMax-LonMin)/(float(len(lon)))
Lat_Res=(LatMax-LatMin)/(float(len(lat)))

 #创建tiff影像
TMP_ds=gdal.GetDriverByName('GTiff').Create(outTif,len(lon),len(lat),1,gdal.GDT_Float32)
    
 #设置影像的显示范围
geotransform=(LonMin,Lon_Res,0,LatMax,0,-Lat_Res)
TMP_ds.SetGeoTransform(geotransform)
srs=osr.SpatialReference()
srs.ImportFromEPSG(4326)#定义输出坐标系为WGS84
TMP_ds.SetProjection(srs.ExportToWkt()) #给新建图层赋予投影信息

#这里通常选取的是左上角点的坐标(lonmin,latmax),但通常情况下图像会上下颠倒,原因是NC数据存储时是按照经纬度均从小到大进行存储的,而在创建tiff时是从经度从小到大,维度从大到小进行存储----即,从左下角点开始读取数据,放到左上角点开始存储

#影像翻转,恢复原样
for i in range(len(lat)):
    tmp=len(lat)-1-i
    for j in range(len(lon)):
        TMP_2maboveground01[i,j]=TMP_2maboveground[tmp,j] 
        
#数据写出
TMP_ds.GetRasterBand(1).SetNoDataValue(-9999)
TMP_ds.GetRasterBand(1).WriteArray(TMP_2maboveground01) # 将数据写入内存
TMP_ds.FlushCache() # 将数据写入硬盘
TMP_ds=None        
      

  • 5
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
处理grib数据并生成tiff文件可以使用cfgrib库。首先,需要安装cfgrib和eccodes库。可以使用以下命令进行环境配置:conda install -c conda-forge cfgrib eccodes。 接下来,可以使用cfgrib库来读取grib数据并进行处理。使用xarray库可以更方便地处理多维数据。以下是一个示例代码: ```python import xarray as xr import cfgrib # 读取grib数据 ds = xr.open_dataset('your_grib_file.grib', engine='cfgrib') # 查看数据信息 print(ds) # 提取需要的变量 var = ds\['your_variable'\] # 查看变量信息 print(var) # 将变量保存为tiff文件 var.to_netcdf('your_output_file.tiff', format='NETCDF4') ``` 在这个示例中,首先使用xr.open_dataset函数读取grib文件,并指定engine为cfgrib。然后,可以查看数据信息和变量信息。最后,使用to_netcdf函数将变量保存为tiff文件。 请注意,具体的代码可能需要根据你的数据和需求进行调整。此外,cfgrib库还有其他功能和方法,你可以根据需要进一步探索和使用。 希望这个回答对你有帮助!如果还有其他问题,请随时提问。 #### 引用[.reference_title] - *1* *2* [关于ERA5气象数据读取的方法](https://blog.csdn.net/m0_48011081/article/details/124303035)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值