python 讀hdf4文件,再轉寫成一個tif文件


1.安裝pyhdf包

(1)通過此鏈接查找並下載pyhdf包:https://www.lfd.uci.edu/~gohlke/pythonlibs/#pygame(根據自己的系統及python版本選擇對應的pyhdf包)

(2)在dos命令行下切換到包所在的文件夾,並運行pip install 包名進行安裝。

2.讀hdf4文件

#導入包

from pyhdf.SD import *

from osgeo import osr

import numpy as np

(1)#讀取文件

file="3B43.20100501.7.HDF"

hdf=SD(file)

#獲取hdf文件的屬性信息

attr=hdf.attributes()

#獲取hdf文件的圖層以及每個圖層所對應的行與列等信息,datasets是一個字典

datasets=hdf.datasets()

#讀某一圖層(我這里的圖層是降雨圖層),圖層名可通過datasets看到。並獲取圖層數據

rainfall_array=hdf.select("precipitation").get()

#圖層的旋轉與轉置(這里我要做旋轉轉置是由於我的圖層需求,可通過查看自己的圖層是否需要做這一步)

 

#對矩陣進行左右翻轉

data=np.fliplr(rainfall_array)

#對矩陣進行轉置

data=np.transpose(data)

#從圖層中讀取到的數據是5月份逐小時數據,我們這里轉換成逐月數據

data=data*24*31

#將數據轉換成兩個字節的整型數據

d=data.astype(np.uint16)

(2)轉tif文件

#創建一個空的投影對象,實例化

ref=osr.SpatialReference()

#定義投影(導入投影參數)

#設置坐標系統為wgs84

ref.ImportFromEPSG(4326)

#查看參考系信息

s=ref.ExportToWkt()

#與上一篇講的gdal寫tif文件相似,這里不做過多描述(我這里的Create參數主要來自上面讀取的圖層信息)

driver = gdal.GetDriverByName("GTiff")

dataset = driver.Create("prec_self.tif", 1440, 400, 1, gdal.GDT_UInt16)

#這里的仿射變換參數主要是從上面的圖層中讀取到的。可自行查看自己所獲取的圖層

 im_geotrans=(-180,0.25,0.0,50,0.0,-0.25)

dataset.SetGeoTransform(im_geotrans)

dataset.SetProjection(s)

dataset.GetRasterBand(1).WriteArray(d)

del dataset

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM