开发者

python中的netCDF4批量处理NC文件的操作方法

开发者 https://www.devze.com 2022-12-13 11:52 出处:网络 作者: skypanxh
目录一、使用ArcMap提取出第一期数据1.使用工具箱中的“Make NetCDF Raster Layer”工具,提取出一个数据2.导出该数据作为标准数据二、使用python批量提取所有数据1. 查看数据属性2.批量导出结果!注意事G
目录
  • 一、使用ArcMap提取出第一期数据
    • 1.使用工具箱中的“Make NetCDF Raster Layer”工具,提取出一个数据
    • 2.导出该数据作为标准数据
  • 二、使用python批量提取所有数据
    • 1. 查看数据属性
    • 2.批量导出结果
  • !注意事GGCCNIqlK

    一、使用ArcMap提取出第一期数据

    1.使用工具箱中的“Make NetCDF Raster Layer”工具,提取出一个数据

    python中的netCDF4批量处理NC文件的操作方法

    可以发现该数据有正确的像元大小、坐标系等

    python中的netCDF4批量处理NC文件的操作方法

    python中的netCDF4批量处理NC文件的操作方法

    2.导出该数据作为标准数据

    python中的netCDF4批量处理NC文件的操作方法

    二、使用python批量提取所有数据

    1. 查看数据属性

    from netCDF4 import Dataset,num2date
    infile = "../01Data/Runoff1992-2014/GRUN_v1_GSWP3_WGS84_05_1902_2014.nc"
    data_set = Dataset(infile) # 读取nc文件信息
    print(data_set)

    输出为

    <class 'netCDF4._netCDF4.Dataset'>

    root group (NETCDF3_CLASSIC data model, file format NETCDF3):

        title: GRUN

        version: GRUN 1.0

        meteorological_forcing: GSWP3

        temporal_resolution: monthly

        spatial_resolution: 0.5x0.5

        crs: WGS84

        proj4: +proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs

       www.cppcns.com EPSG: 4326

        references: Ghiggi et al.,2019. GRUN: An o编程客栈bservatiGGCCNIqlKon-based global gridded runoff dataset from 1902 to 2014. ESSD, doi: https://doi.org/10.5194/essd-2019-32

        authors: Gionata Ghiggi; Lukas Gudmundsson

        contacts: gionata.ghiggi@gmail.com; lukas.gudmundsson@env.ethz.ch

        institution: Land-Climate Dynamics, Institute for Atmospheric and Climate Science, ETH Zürich

        institution_id: IAC ETHZ

        dimensions(sizes): X(720), Y(360), time(1356)

        variables(dimensions): float64 X(X), float64 Y(Y), float64 time(time), float32 Runoff(time, Y, X)

        groups: 

    可以看到variables变量X、Y为经纬度,time为时间,Runoff为需要的结果

    2.批量导出结果

    from osgeo import gdal
    from netCDF4 import Dataset,num2date
    import numpy as np
    
    def WriteTiff(im_data,inputdir, path):
        raster = gdal.Open(inputdir)
        im_width = raster.RasterXSize #栅格矩阵的列数
        im_height = raster.RasterYSize #栅格矩阵的行数
        im_bands = raster.RasterCount #波段数
        im_geotrans = raster.GetGeoTransform()#获取仿射矩阵信息
        im_proj = raster.GetProjection()#获取投影信息
        
        if 'int8' in im_data.dtype.name:
            datatype = gdal.GDT_Byte
        elif 'int16' in im_data.dtype.name:
            datatype = gdal.GDT_UInt16
        else:
            datatype = gdal.GDT_Float32
        if len(im_data.shape) == 3:
            im_bands, im_height, im_width = im_data.shape
        elif len(im_data.shapeGGCCNIqlK) == 2:
            im_data = np.array([im_data])
            im_bands, (im_height, im_width) = 1, im_data.shape
            # 创建文件
        driver = gdal.GetDriverByName("GTiff")
        dataset = driver.Create(path, im_width, im_height, im_bands, datatype)
        if (dataset != None):
            dataset.SetGeoTransform(im_geotrans)  # 写入仿射变换参数
            dataset.SetProjection(im_proj)  # 写入投影
        for i in range(im_bands):
            dataset.GetRasterBand(i + 1).WriteArray(im_data[i])
        del dataset
    infile = "../01Data/Runoff1992-2014/GRUN_v1_GSWP3_WGS84_05_1902_2014.nc"
    data_set = Dataset(infile) # 读取nc文件信息
    time = data_set.variables["time"][:]  # 获取时间一列
    units = data_set.variables["time"].units # 获取第一期时间
    #读取样本tif文件的地理信息
    intif = "../03ProcessData/runoff_example.tif"
    for i in range(0,len(time)):
        yr = num2date(time[i],units).year # 提取年份
        mon = num2date(time[i],units).month    # 提取月份
        value_data = data_set.variables['Runoff'][i]
        # 将缺失值改为0
        data = value_data.data
        mask = value_data.mask
        data[np.where(mask == True)] = 0
        outputname = "../01Data/Runoff1992-2014/tif/" + str(yr) + str(mon).zfill(2) + ".tif"
        WriteTiff(data,intif , outputname)
        print(outputname)

    !注意事项

    1.使用时候请自行修改修改输入输出文件路径与变量名称

    2.根据需要处理缺失值

    到此这篇关于python的netCDF4批量处理NC格式文件的操作方法的文章就介绍到这了,更多相关python netCDF4处理NC格式文件内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

    0

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    关注公众号