数据为全球近20年的气温及总降水量NetCDF(nc)影像,处理为tif格式的影响,并裁剪为中国区域。

    1. import arcpy
    2. from arcpy import env
    3. from arcpy.sa import *
    4. #t2m对应温度波段、tp对应降水波段
    5. variable = "tp" #对应的波段(不知道是不是叫波段,因为一张影像里面既有温度也有降水)
    6. XDimension = "longitude"
    7. YDimension = "latitude"
    8. #outRasterLayer = "t2m_layer"
    9. bandDimmension = ""
    10. dimensionValues = ""
    11. valueSelectionMethod = ""
    12. cellRegistration = ""
    13. for year in range(2001, 2021): # 年份
    14. env.workspace = r"Z:\VM\NDVI2\tem&pre" + '\\' + str(year) #输入的数据路径
    15. outpath = r"Z:\VM\NDVI2\tem&pre_mask\pre" + '\\' + str(year) # 输出的数据路径
    16. #rasters = arcpy.ListRasters("*", All) #无效,arcpy获取不了nc文件
    17. rasters = [] #用for循环来获取所有nc文件
    18. for i in range(1,13):
    19. if i < 10:
    20. rasters.append(r"Z:\VM\NDVI2\tem&pre" + '\\' + str(year) + '\\' + str(year) + "-0" + str(i) + "tem&pre.nc") #按需修改
    21. else:
    22. rasters.append(r"Z:\VM\NDVI2\tem&pre" + '\\' + str(year) + '\\' + str(year) + "-" + str(i) + "tem&pre.nc") #同上
    23. #value是下面Minus函数用的,为了将华氏温度转为摄氏度(-273.15)
    24. #因为Minus的第二个参数放数值一直报错,所以我就生成了一张所有像元(像素)值都为273.15的tif影像
    25. #生成方式:见代码下方
    26. #value = r"Z:\VM\NDVI2\27315\27315.tif"
    27. for raster in rasters: # 遍历影像
    28. out = outpath+'\\'+(raster.split("-", 1)[1]).split("tem&",1)[0] +((raster.split("-", 1)[1]).split("tem&",1)[1]).split(".",1)[0] + ".tif" #输出位置及名称
    29. arcpy.MakeNetCDFRasterLayer_md(raster, variable, XDimension, YDimension,
    30. out, bandDimmension, dimensionValues,
    31. valueSelectionMethod, cellRegistration)
    32. #outMinus = Minus(out,value) #减函数
    33. outExtractByMask = ExtractByMask(out, r"Z:\VM\NDVI2\map\bou2_4p.shp") # 掩膜、去掉影像的黑边,更美观
    34. outExtractByMask.save(out)

    生成方式:
    arcgis先导入一个nc文件,「多维工具-创建NetCDF栅格图册」,变量改成需要的,其它默认
    截屏2022-01-03 17.41.50.png
    「spatial analyst-条件分析-条件函数」,不管true or false全部都为273.15
    截屏2022-01-03 17.41.21.png