本文介紹基於Python中ArcPy模塊,實現大量HDF格式柵格圖像文件批量轉換為TIFF格式的方法。 首先,來看看我們想要實現的需求。 在一個名為HDF的文件夾下,有五個子文件夾;每一個子文件夾中,都存儲了大量的.hdf格式的柵格遙感影像數據。 我們在其中任選一個子文件夾,來看看其中所含的文件。 ...
本文介紹基於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
的格式保存了。
至此,大功告成。