最近想用个Modis ET数据,哈哈,大工程呀,思路很简单,处理真麻烦,而且耗时。这里虽然网上方法很多,但总体来说还是有点乱,这里自己总结一下,以后方便看。
讲的是第一步,hdf转tif
下载到的文件是hdf文件,需要先转成tif文件,这个地方用arcpy还是比较方便的,不过比较耗时。让它跑着呗,我这台老古董电脑能站30年😂!!下面贴出代码,参考了一些别人的代码(https://blog.csdn.net/sinat_35763722/article/details/90679743)。改动了几句,原因是(1)arcpy有的时候会中断,这样的话文件就要重跑了,这里加了个判断文件是否存在的语句。如果已经生成tif了,则不再重复执行;(2)有的hdf文件可能有问题,加了个try语句,防止因为一个文件的问题卡壳,影响文件处理;并且把这个文件写在了log里以便后续调整。代码在arcgis arccatalog里面会更好。
import os
import traceback
import arcpy
import logging
arcpy.env.overwriteOutput = 1
arcpy.CheckOutExtension("Spatial")
inPath=r'G:\\modis_et_20220810'
outPath=r'G:\\modis_et_tif_20221019\\'
arcpy.env.workspace = inPath
arcpy.env.scratchWorkspace = inPath
hdfList = arcpy.ListRasters('*','HDF')
for hdf in hdfList:
number=0
eviName="ET_band" + str(number) + "_" + hdf[0:23] + ".tif"
save_path=os.path.join(outPath , eviName)
if os.path.exists(save_path):
continue
try:
data1=arcpy.ExtractSubDataset_management(hdf,save_path, number)
except:
logging.debug(traceback.format_exc())
errorFile = open(r'G:\log.txt', 'a')
errorFile.write(traceback.format_exc())
errorFile.close()
continue