例子里使用的nc文件,变量名是“pre”,这个变量名需要提前查到。我是用matlab读取查到的。
import arcpy
from arcpy import env
from arcpy.sa import *
import os
arcpy.CheckOutExtension("Spatial")
inNetCDF = r"E:\DATA\SPI\cru_ts4_05_1901_2020_pre_dat.nc" #输入路径
outLoc = r"E:\DATA\SPI\cru_pre" #输出路径
variable = "pre" #此处是.nc数据中的变量名
x_dimension = "lon"
y_dimension = "lat"
band_dimension = ""
valueSelectionMethod = "BY_VALUE" #以上五个变量为第一个函数会用到的变量,提前定义好
nc_FP = arcpy.NetCDFFileProperties(inNetCDF) #读取netCDF文件
nc_Dim = nc_FP.getDimensions() #获取维度信息,返回一个维度列表 ['lon','lat','time']
for dimension in nc_Dim:
if dimension == "time":
top = nc_FP.getDimensionSize(dimension) #获取维度的大小
for i in range(0, top):
dimension_value = nc_FP.getDimensionValue(dimension, i) #遍历每一个时间值
year_value = str(dimension_value[0:4]) #对每一个值提取年份
if eval(year_value) >= 2000: #判断年份
nowFile =str(dimension_value[0:7]) #取前七位,作为输出名
nowFile = nowFile.replace('/',' ') #去掉输出名中的‘/’
print(nowFile)
dv1 = ["time", dimension_value] #列表
dimension_values = [dv1]
outpath= outLoc+"\\"+nowFile + ".tif"
arcpy.MakeNetCDFRasterLayer_md(inNetCDF,variable,x_dimension,y_dimension,
nowFile,band_dimension,dimension_values,
valueSelectionMethod)
arcpy.CopyRaster_management(nowFile, outpath, "", "", "", "NONE", "NONE", "")
print('success')