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

来源:https://www.cnblogs.com/fkxxgis/archive/2023/03/13/17210827.html
-Advertisement-
Play Games

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


  本文介紹基於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的格式保存了。

  至此,大功告成。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 作者:你呀不牛 鏈接:https://juejin.cn/post/7114669787870920734 前段時間,同事在代碼中KW掃描的時候出現這樣一條: 上面出現這樣的原因是在使用foreach對HashMap進行遍歷時,同時進行put賦值操作會有問題,異常ConcurrentModifica ...
  • 1.總結內容參考:https://blog.csdn.net/dhklsl/article/details/127533485 2.下麵是本人工作項目中實戰到的案例(具體業務的實體沒必要關註) 2.1.攔截器使用 點擊查看代碼 import java.lang.invoke.MethodHandle ...
  • IDEA: 如何導入項目模塊 以及 將 Java程式打包 JAR 詳細步驟 、 @ IDEA 導入項目模塊 Module 一. 創建一個空項目 想要導入模塊 Module ,我們需要先創建一個項目,因為 Module模塊在 IDEA 中是存在於項目下的。 這裡我們先創建一個空項目,當然已經有項目了, ...
  • 我這個人比較懶,總是喜歡把收到的重要文件,或者比較緊急的文件放到桌面,久而久之,桌面或者文件夾越來越亂 。 不知道大家是不是像我一樣的 我滴媽呀,看著就很崩潰! 之所以放在桌面上,主要是為了下次使用的時候好找 但是,其實,結果…並沒有 結果,我的馬馬~~ 反而更難找了 也不知道越亂越好找這句話是誰第 ...
  • 作者:變速風聲 鏈接:https://juejin.cn/post/7104090532015505416 前言 在開發中遇到一個業務訴求,需要在千萬量級的底池數據中篩選出不超過 10W 的數據,並根據配置的權重規則進行排序、打散(如同一個類目下的商品數據不能連續出現 3 次)。 下麵對該業務訴求的 ...
  • 在正式開始驅動開發之前,需要自行搭建驅動開發的必要環境,首先我們需要安裝`Visual Studio 2013`這款功能強大的程式開發工具,在課件內請雙擊`ISO`文件並運行內部的`vs_ultimate.exe`安裝包,`Visual Studio`的安裝非常的簡單,您只需要按照提示全部選擇預設參... ...
  • C++語言線上運行編譯,是一款可線上編程編輯器,在編輯器上輸入C++語言代碼,點擊運行,可線上編譯運行C++語言,C++語言代碼線上運行調試,C++語言線上編譯,可快速線上測試您的C++語言代碼,線上編譯C++語言代碼發現是否存在錯誤,如果代碼測試通過,將會輸出編譯後的結果。 該線上工具由IT寶庫提 ...
  • 當我們準備去殺死一個進程時,從程式設計的本身來考慮,我們應當要設計一定的保護方案來確保程式被非正常終止時,相應的計算結果也能夠被很好的保存下來。在Python中可以使用signal.signal函數來實現這樣的功能,但是如果要實現數據的保存功能,需要結合一個實際的類來實現。 ...
一周排行
    -Advertisement-
    Play Games
  • GoF之工廠模式 @目錄GoF之工廠模式每博一文案1. 簡單說明“23種設計模式”1.2 介紹工廠模式的三種形態1.3 簡單工廠模式(靜態工廠模式)1.3.1 簡單工廠模式的優缺點:1.4 工廠方法模式1.4.1 工廠方法模式的優缺點:1.5 抽象工廠模式1.6 抽象工廠模式的優缺點:2. 總結:3 ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 本章將和大家分享ES的數據同步方案和ES集群相關知識。廢話不多說,下麵我們直接進入主題。 一、ES數據同步 1、數據同步問題 Elasticsearch中的酒店數據來自於mysql資料庫,因此mysql數據發生改變時,Elasticsearch也必須跟著改變,這個就是Elasticsearch與my ...
  • 引言 在我們之前的文章中介紹過使用Bogus生成模擬測試數據,今天來講解一下功能更加強大自動生成測試數據的工具的庫"AutoFixture"。 什麼是AutoFixture? AutoFixture 是一個針對 .NET 的開源庫,旨在最大程度地減少單元測試中的“安排(Arrange)”階段,以提高 ...
  • 經過前面幾個部分學習,相信學過的同學已經能夠掌握 .NET Emit 這種中間語言,並能使得它來編寫一些應用,以提高程式的性能。隨著 IL 指令篇的結束,本系列也已經接近尾聲,在這接近結束的最後,會提供幾個可供直接使用的示例,以供大伙分析或使用在項目中。 ...
  • 當從不同來源導入Excel數據時,可能存在重覆的記錄。為了確保數據的準確性,通常需要刪除這些重覆的行。手動查找並刪除可能會非常耗費時間,而通過編程腳本則可以實現在短時間內處理大量數據。本文將提供一個使用C# 快速查找並刪除Excel重覆項的免費解決方案。 以下是實現步驟: 1. 首先安裝免費.NET ...
  • C++ 異常處理 C++ 異常處理機制允許程式在運行時處理錯誤或意外情況。它提供了捕獲和處理錯誤的一種結構化方式,使程式更加健壯和可靠。 異常處理的基本概念: 異常: 程式在運行時發生的錯誤或意外情況。 拋出異常: 使用 throw 關鍵字將異常傳遞給調用堆棧。 捕獲異常: 使用 try-catch ...
  • 優秀且經驗豐富的Java開發人員的特征之一是對API的廣泛瞭解,包括JDK和第三方庫。 我花了很多時間來學習API,尤其是在閱讀了Effective Java 3rd Edition之後 ,Joshua Bloch建議在Java 3rd Edition中使用現有的API進行開發,而不是為常見的東西編 ...
  • 框架 · 使用laravel框架,原因:tp的框架路由和orm沒有laravel好用 · 使用強制路由,方便介面多時,分多版本,分文件夾等操作 介面 · 介面開發註意欄位類型,欄位是int,查詢成功失敗都要返回int(對接java等強類型語言方便) · 查詢介面用GET、其他用POST 代碼 · 所 ...
  • 正文 下午找企業的人去鎮上做貸後。 車上聽同事跟那個司機對罵,火星子都快出來了。司機跟那同事更熟一些,連我在內一共就三個人,同事那一手指桑罵槐給我都聽愣了。司機也是老社會人了,馬上聽出來了,為那個無辜的企業經辦人辯護,實際上是為自己辯護。 “這個事情你不能怪企業。”“但他們總不能讓銀行的人全權負責, ...