Netcdf(nc)转Tiff

NC格式文件转换为Tiff文件。

代码实现

导入相关库

# -*- coding: UTF-8 -*-
# 导入相关库
import numpy as np
import netCDF4 as nc
from osgeo import gdal,osr,ogr
import os
import glob
import datetime 
import matplotlib.pyplot as plt

加载数据

读取netcdf数据

data=nc.Dataset('LGHAP.PM10.D01.Y2010_2020.nc')#读取nc文件
Lat_data = data.variables['lat'][:]#读取纬度
Lon_data = data.variables['lon'][:]#读取经度
PM10= np.asarray(data.variables['PM10'])#读取对应变量

NC转TIFF

def NC_to_Tif(data,attribute_name,Input_folder,Output_folder):
    nc_data_obj = nc.Dataset(Input_folder+'//'+data)
    
    Lon = nc_data_obj.variables['lon'][:]
    Lat = nc_data_obj.variables['lat'][:]
    attribute= np.asarray(nc_data_obj.variables[attribute_name])  # 提取对应变量
    #影像的左上角和右下角坐标
    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)
    #由于nc文件中记录了多时序的信息,需要遍历时间,对每一个时间切片的数据转换为tif文件
    for i in range(len(attribute[:])):
        #创建.tif文件
        driver = gdal.GetDriverByName('GTiff')
        out_tif_name = Output_folder + '/' + attribute_name+'_' + data.split('\\')[-1].split('.')[0] + '_' + str(i+1) + '.tif'
        out_tif = driver.Create(out_tif_name,N_Lon,N_Lat,1,gdal.GDT_Float32)
        # 设置影像的显示范围
        geotransform = (LonMin,Lon_Res, 0, LatMax, 0, -Lat_Res)
        out_tif.SetGeoTransform(geotransform)
        #获取地理坐标系统信息,用于选取需要的地理坐标系统
        srs = osr.SpatialReference()
        srs.ImportFromEPSG(4326) # 定义输出的坐标系为"WGS 84"
        out_tif.SetProjection(srs.ExportToWkt()) # 给新建图层赋予投影信息
        #数据写出
        matrix=attribute[i].T
        matrix=matrix[::-1]#此处[::-1]用于图像的垂直镜像对称,避免图像颠倒
        out_tif.GetRasterBand(1).WriteArray(matrix)
        # 将数据写入内存,此时没有写入硬盘 
        out_tif.FlushCache() # 将数据写入硬盘
    del out_tif # 注意必须关闭tif文件

推荐阅读
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值