NC转TIFF--python实现

先看函数

1.提取NC数据和地理信息

def nc2tiff(nc_file, output_dir):
    data_name = os.path.basename(nc_file) #文件名
    dataset = nc.Dataset(nc_file)

    #############获取经纬度和时间变量############# 
    Lat = dataset.variables["latitude"][:] #latitude
    Lon = dataset.variables["longitude"][:] #longitude
    time = dataset.variables["time"][:] #era ei temp

    ##############设置地理参考##############
    LonMin, LatMax, LonMax, LatMin = [Lon.min(), Lat.max(), Lon.max(), Lat.min()]##空间范围

    Lon_Res = (LonMax - LonMin) / (float(cols) - 1) #lon分辨率计算
    Lat_Res = (LatMax - LatMin) / (float(rows) - 1) #lat分辨率计算

    geo = (LonMin, Lon_Res, 0, LatMax, 0, -Lat_Res) #geo = (-9036842.762, 25067.525, 0, 9036842.763000002, 0, -25067.525) #globsnow   # -Lat_Res一定要是-的

    src_srs = osr.SpatialReference() #构造projection
    src_srs.ImportFromEPSG(4326)  # 定义输出的坐标系为"WGS 84",AUTHORITY["EPSG","4326"] 
    src_srs_wkt = src_srs.ExportToWkt()   # 给新建图层赋予投影信息

   ################提取变量####################
    dayarray = np.array(dataset.variables['SWE_tavg'][0, :, :])
    out_file = os.path.join(output_dir, "gldas" + nc_file[38:46] + ".tif")
    print(out_file)
    write_tiff(out_file, geo, src_srs_wkt, rows, cols, dayarray)

注:这里针对的是每日NC数据,如果一个NC数据包含多维时间数据,需要根据TIME循环

2.TIFF生成

def write_tiff(tiff_file, geo, proj, rows, cols, data_array):

    driver = gdal.GetDriverByName("Gtiff")

    outdataset = driver.Create(tiff_file, cols, rows, 1, gdal.GDT_Float32)
    outdataset.SetGeoTransform(geo)
    outdataset.SetProjection(proj)

    band = outdataset.GetRasterBand(1)
    band.WriteArray(data_array)

3.输入路径,运行

if __name__ == '__main__':

    # # 结果存储路径
    tiff_dir = r"D:\40\ei\tiff"

    # nc数据路径
    nc_file = r"D:\40\ei\nc2\.*tif"
    ncFileList = getFileName(nc_file,2016,2019) ## 筛选特定年份的数据

    # nc数据转换为tif数据
    for ncFile in ncFileList:
        print(ncFile)
        nc2tiff(ncFile, tiff_dir)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值