基于ArcPy将HDF格式栅格文件批量转为TIFF格式
本文介绍基于Python中ArcPy模块,实现大量HDF格式栅格图像文件批量转换为TIFF格式的方法。
首先,来看看我们想要实现的需求。
在一个名为HDF
的文件夹下,有五个子文件夹;每一个子文件夹中,都存储了大量的.hdf
格式的栅格遥感影像数据。
我们在其中任选一个子文件夹,来看看其中所含的文件。
我们要做的,就是将HDF
文件夹下的全部子文件夹中的全部.hdf
格式图像文件,一次性转换为.tif
格式的图像文件,并存储在另一个名为TIFF
的文件夹中。
知道了具体需求,就可以开始操作了。首先,这里用到的代码如下。
# -*- coding: utf-8 -*-
"""
Created on Fri Apr 15 11:13:27 2022
@author: fkxxgis
"""
import os
import arcpy
hdf_file_path="E:/LST/Data/MODIS/HDF/"
tif_file_path="E:/LST/Data/MODIS/TIFF/"
hdf_file_name_list=os.listdir(hdf_file_path)
for hdf_file in hdf_file_name_list:
if os.path.isdir(hdf_file_path+hdf_file):
file_name_temp=hdf_file
hdf_file_name_list_new=os.listdir(hdf_file_path+hdf_file)
for hdf_file in hdf_file_name_list_new:
tif_file_name=hdf_file[8:23]+".tif"
data=arcpy.ExtractSubDataset_management(hdf_file_path+file_name_temp+'/'+hdf_file,tif_file_path+tif_file_name,"0;4")
else:
tif_file_name=hdf_file[8:23]+".tif"
data=arcpy.ExtractSubDataset_management(hdf_file_path+hdf_file,tif_file_path+tif_file_name,"0;4")
其中,hdf_file_path
是.hdf
格式文件的存储路径,tif_file_path
是.tif
格式文件的存储路径,换句话说也就是我们的结果保存路径。
首先,通过os.listdir()
函数获取HDF
文件夹下全部文件;由于我们的.hdf
格式文件并不是直接保存在HDF
这个大文件夹下的,而是HDF
下属的多个子文件夹下,所以进一步通过os.path.isdir()
函数进入这些子文件夹,并遍历其中的.hdf
格式文件,保存在hdf_file_name_list_new
中;随后,依据每一个.hdf
格式文件的名称,依次配置之后我们生成的.tif
格式文件的名称。
接下来,我们就可以通过arcpy.ExtractSubDataset_management()
函数来实现图像格式的转换了。其中,这一函数的第一个参数是原有.hdf
文件的路径及名称,第二个参数是我们希望生成的.tif
文件的路径及名称,第三个参数是我们希望在格式转换时,保存的具体波段。
需要着重说明一下这里保存波段的选取。在本文中,我需要转换格式的是MODIS的地表温度产品MOD11A2,其第一个波段(编号为0
)是地表白天的温度,第五个波段(编号为4
)是地表夜晚的温度,如下图所示。
假如在后续处理中,我只需要白天、夜晚这两个波段,也就是编号为0
和4
的这两个波段,那么我就只需要在arcpy.ExtractSubDataset_management()
函数的第三个参数中输入"0;4"
就好了;其他情况以此类推。
以上便是本次操作的全部代码。我们这里选择在 IDLE (Python GUI) 中运行代码。
得到结果文件如下图;可以看到,所有图像都已经以.tif
的格式保存了。