nc文件提取至tif文件

nc文件提取至tif文件

将日均土壤水含量的nc文件分解成366天的tif文件

# -*- coding: utf-8 -*-

# 模块导入
import numpy as np
import netCDF4 as nc
from osgeo import gdal, osr, ogr
import os
import glob


# 单个nc的soilw数据读取为多个tif文件,并将soilw值化为-1-1之间
def NC_to_tiffs(data, Output_folder):
    nc_data_obj = nc.Dataset(data)
    Lon = nc_data_obj.variables['lon'][:]
    Lat = nc_data_obj.variables['lat'][:]
    ndvi_arr = np.asarray(nc_data_obj.variables['soilw'])  # 将ndvi数据读取为数组
    #ndvi_arr_float = ndvi_arr.astype(float) / 10000  # 将int类型改为float类型,并化为-1 - 1之间

    # 影像的左上角和右下角坐标
    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(ndvi_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(ndvi_arr[i])  # 将数据写入内存,此时没有写入硬盘
        out_tif.FlushCache()  # 将数据写入硬盘
        out_tif = None  # 注意必须关闭tif文件


def main():
    Input_folder = 'F:\\data_python_test\\nc_to_tif\\nc'
    Output_folder = 'F:\\data_python_test\\nc_to_tif\\tif_result'

    # 读取所有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 + '-----转tif成功'

    print
    '----转换结束----'


main()

参考 https://www.cnblogs.com/xsman/p/11298685.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值