Python将hdf文件中的某个图层转换成Tiff输出
以MODIS数据为例,选择其中一个图层输出,并进行投影转换,将MODIS的正弦曲线投影转换为特定投影坐标系(UTM)。
from osgeo import gdal
# 输入文件路径(HDF 文件)
input_hdf = 'MCD.hdf'
# 输出文件路径(TIFF 文件)
output_tiff = 'MCD43A3.tif'
# 要提取的图层名称
layer_name = "要输出的图层"
# 投影转换参数
target_projection = "+proj=utm +zone=38 +datum=WGS84 +units=m +no_defs"
# 打开 HDF 数据集
hdf_dataset = gdal.Open(input_hdf)
# 遍历 HDF 数据集的所有子数据集
for subdataset_name, subdataset_description in hdf_dataset.GetSubDatasets():
if layer_name in subdataset_description:
# 打开匹配的子数据集
subdataset_ds = gdal.Open(subdataset_name)
if subdataset_ds is not None:
# 创建 TIFF 数据集
driver = gdal.GetDriverByName("GTiff")
tiff_dataset = driver.Create(output_tiff, subdataset_ds.RasterXSize, subdataset_ds.RasterYSize, 1, gdal.GDT_Float32)
# 将子数据集的数据写入 TIFF 数据集
tiff_dataset.GetRasterBand(1).WriteArray(subdataset_ds.ReadAsArray())
# 设置 TIFF 数据集的地理转换和投影信息
tiff_dataset.SetGeoTransform(subdataset_ds.GetGeoTransform())
tiff_dataset.SetProjection(subdataset_ds.GetProjection())
# 投影转换
gdal.Warp(output_tiff, tiff_dataset, dstSRS=target_projection)
# 关闭数据集
tiff_dataset = None
subdataset_ds = None
hdf_dataset = None
print("TIFF 文件已创建并保存。")
break