HDF格式遙感影像批次轉為TIFF格式:ArcPy實現

2023-03-13 12:00:11

  本文介紹基於PythonArcPy模組,實現大量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)是地表夜晚的溫度,如下圖所示。

  假如在後續處理中,我只需要白天、夜晚這兩個波段,也就是編號為04的這兩個波段,那麼我就只需要在arcpy.ExtractSubDataset_management()函數的第三個引數中輸入"0;4"就好了;其他情況以此類推。

  以上便是本次操作的全部程式碼。我們這裡選擇在 IDLE (Python GUI) 中執行程式碼。

  得到結果檔案如下圖;可以看到,所有影象都已經以.tif的格式儲存了。

  至此,大功告成。