零基础Python实现HDF转TIFF:MOD17A2H GPP影像提取需求
MODIS MOD17A2H 提取GPP并转TIFF分步指南
1. 先搞定Python环境和依赖
- 没装Python的话直接装Anaconda(选最新版就行),安装时记得勾选「Add to PATH」。
- 打开Anaconda Prompt(或终端),输入命令安装必备库:
(用conda装GDAL兼容性更好,不推荐pip直接装)conda install gdal numpy -c conda-forge
2. 确认HDF文件和GPP数据集路径
- 找到你下载的MOD17A2H格式文件(比如
MOD17A2H.A2023001.h27v06.061.2023012053108.hdf)。 - 终端输入命令查看HDF内部的数据集结构:
在输出里找带gdalinfo MOD17A2H.A2023001.h27v06.061.2023012053108.hdfGpp_500m的条目,通常完整路径是:HDF4_EOS:EOS_GRID:"MOD17A2H.A2023001.h27v06.061.2023012053108.hdf":MOD_Grid_GPP:Gpp_500m,把这个路径记下来。
3. 编写转换脚本
新建一个文本文件,重命名为hdf2tiff.py,粘贴以下代码,替换其中的路径为你自己的文件信息:
# 导入依赖库 from osgeo import gdal import numpy as np # 替换成你的文件路径 hdf_file = "MOD17A2H.A2023001.h27v06.061.2023012053108.hdf" # 替换成刚才找到的GPP数据集完整路径 gpp_dataset = 'HDF4_EOS:EOS_GRID:"MOD17A2H.A2023001.h27v06.061.2023012053108.hdf":MOD_Grid_GPP:Gpp_500m' # 输出TIFF的文件名 output_tiff = "gpp_output.tiff" # 打开GPP数据集 ds = gdal.Open(gpp_dataset) if not ds: print("找不到GPP数据集!检查路径是否正确") exit() # 读取影像数据和地理信息 gpp_data = ds.ReadAsArray() geo_transform = ds.GetGeoTransform() projection = ds.GetProjection() rows, cols = gpp_data.shape # 还原真实GPP值(MOD17A2H的原始值需乘以0.1,单位:g C/m²/8day) gpp_data = gpp_data * 0.1 # 创建TIFF输出文件 driver = gdal.GetDriverByName("GTiff") output_ds = driver.Create(output_tiff, cols, rows, 1, gdal.GDT_Float32) if not output_ds: print("创建TIFF失败!检查路径权限") exit() # 设置TIFF的地理信息和投影 output_ds.SetGeoTransform(geo_transform) output_ds.SetProjection(projection) # 写入数据并保存 output_ds.GetRasterBand(1).WriteArray(gpp_data) output_ds.FlushCache() # 关闭数据集释放资源 ds = None output_ds = None print(f"转换完成!TIFF文件已保存到: {output_tiff}")
4. 运行脚本
- 终端切换到脚本所在文件夹,输入:
python hdf2tiff.py - 无报错的话,就能看到生成的TIFF文件,用QGIS或ArcGIS打开即可查看GPP数据。
常见问题
- 报错「找不到GDAL」:重新用conda安装GDAL,或检查环境变量是否配置正确。
- 报错「数据集不存在」:核对
gpp_dataset路径是否和gdalinfo输出完全一致,注意文件名大小写(Linux/Mac系统敏感)。 - TIFF打开显示黑色:是因为原始数据是缩放后的值,脚本里已经加了
gpp_data = gpp_data * 0.1还原真实值,若仍有问题可检查数据范围是否超出软件默认显示区间。
内容的提问来源于stack exchange,提问作者Fran
相关产品推荐
相关产品推荐

