asc转tif python,NC转TIF数据处理(python)

在进行气候分析时,很多人都会用到ERA5数据。关于ERA5数据的下载,很多人都给出了相应的下载方法,官方也有相应的处理代码,这里简单说一下怎么把NC数据转成GIS分析常用的栅格TIF数据。代码如下

import numpy as np

import netCDF4 as nc

from osgeo import gdal,osr,ogr

import os

import glob

def NC_to_tiffs(data,Output_folder):

nc_data_obj = nc.Dataset(data)

Lon = nc_data_obj.variables['longitude'][:]

Lat = nc_data_obj.variables['latitude'][:]

tp_arr = np.asarray(nc_data_obj.variables['tp'])  #将tp数据读取为数组

tp_arr_float = tp_arr.astype(float)*1000

LonMin,LatMax,LonMax,LatMin = [Lon.min(),Lat.max(),Lon.max(),Lat.min()]

N_Lat = len(Lat)

N_Lon = len(Lon)

Lon_Res = (LonMax - LonMin) /(float(N_Lon)-1)

Lat_Res = (LatMax - LatMin) / (float(N_Lat)-1)

for i in range(len(tp_arr[:])):

#创建.tif文件

driver = gdal.GetDriverByName('GTiff')

out_tif_name = Output_folder + '\\'+ data.split('\\')[-1].split('.')[0] + '_' + str(i+1) + '.tif'

out_tif = driver.Create(out_tif_name,N_Lon,N_Lat,1,gdal.GDT_Float32)

# 设置影像的显示范围

#-Lat_Res一定要是-的

geotransform = (LonMin,Lon_Res, 0, LatMax, 0, -Lat_Res)

out_tif.SetGeoTransform(geotransform)

#获取地理坐标系统信息,用于选取需要的地理坐标系统

srs = osr.SpatialReference()

srs.ImportFromEPSG(4326)# 定义输出的坐标系为"WGS 84",AUTHORITY["EPSG","4326"]

out_tif.SetProjection(srs.ExportToWkt()) # 给新建图层赋予投影信息

#数据写出

out_tif.GetRasterBand(1).WriteArray(tp_arr_float[i]) # 将数据写入内存,此时没有写入硬盘

out_tif.FlushCache() # 将数据写入硬盘

out_tif = None # 注意必须关闭tif文件

def main():

Input_folder = 'D:\\ERA5\\1981'

Output_folder = 'F:\\tp_tif\\test'

# 读取所有nc数据

data_list = glob.glob(Input_folder + '\\*.nc')

for i in range(len(data_list)):

data = data_list[i]

NC_to_tiffs(data,Output_folder)

print (data)

main()

因为这里处理的是降水数据,所以变量是tp,各位需要对进行的数据进行自定义变量。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值