基于Arcpy将NC数据转tif

使用arcpy将1901-2020年逐月降水数据进行处理,并不是很推荐使用arcpy,不知道是我太low,写的代码循环太慢,还是就是处理的慢,不如matlab处理的快,不过倒是可以再加上其他处理,转换单位到mm、掩膜提取等,跑一晚上应该还是能结束的。

# -*- coding: utf-8 -*-
# 主要参考Esir技术支持NetCDF_time_slice_to_raster脚本与MakeNetCDFRasterLayer脚本
#速度不快,不如matlab
import arcpy, os, numpy  # 导入arcpy等

filepath = 'E:/R_FACTOR_zong/NC'  # 读取文件夹
file_list = os.listdir(filepath)  # 读取文件夹下所有的文件,我的文件路径之下只有NC文件
length = len(file_list)
OutputFolder = "H:/out4" #设置tif文件的输出路径
for i in range(0, length):  # 建立循环
    file = filepath + '/' + file_list[i]
    print(file)
    filename = file_list[i]
    # inNetCDFFile = file
    variable = "pre"  # 变量类型,我这里为降水
    XDimension = "lon"  # 读取经纬度
    YDimension = "lat"
    startyear = int(filename[4:8])

    for m in range(0, 3):  # 三年m 0 1 2
        year = str(startyear + m)
        for n in range(1, 13):  # n是月份,1-12
            mouth = str(n)
            outtime = year + 'y' + mouth + 'm'#设置输出的文件名,以时间进行命名
            outRasterLayer = outtime
            print(outRasterLayer)
            band =str(m * 12 + n)
            bandDimension = ''
            dimensionValues = 'time'+" "+band #设置dimensionValue,格式为"time 1",,所以添加了空格
            print(dimensionValues)
            valueSelectionMethod = "BY_VALUE"#如果by index,索引是从0开始的
            # Execute MakeNetCDFRasterLayer
            arcpy.MakeNetCDFRasterLayer_md(file, variable, XDimension, YDimension, outRasterLayer, bandDimension,
                                           dimensionValues, valueSelectionMethod)
            # 导出为tif
            outtif = OutputFolder+'/'+outtime+".tif"
            print(outtif)
            arcpy.CopyRaster_management(outRasterLayer, outtif, background_value= 0, pixel_type="32_BIT_FLOAT")
            #导出tif,设置背景值0为nodata;不同版本arcgis参数情况不同;转为float,没必要double类型,便于接下来转换单位并裁剪研究区

基于Arcpy将NC数据转tif_第1张图片

你可能感兴趣的:(ArcGIS脚本学习杂录,Arcgis,Pro脚本学习,python,pycharm,ArcPy,ArcGIS,Pro)