读取/打开MODIS Aqua .hdf文件,并在GDAL和Matplotlib中显示/绘制输出

1 投票
2 回答
6277 浏览
提问于 2025-04-18 00:16

我尝试过很多方法,搜索了很多资料,但还是找不到如何用gdal和matplotlib来读取和绘制一个给定的Modis Aqua .hdf文件的方法。任何帮助都非常感谢。顺便说一下,我是在Windows 7上使用Python 2.7.5。这个文件的名字是A2014037040000.L2_LAC.SeAHABS.hdf。在这个hdf文件的物理数据中,我只会使用chlor_a。

更新:

这是一个示例文件的链接。

A2014037040500.L2_LAC.SeAHABS.hdf

2 个回答

1

你可以试着为MODIS数据集设置数据类型。我猜它是16位无符号整数。

ds = gdal.Open(hdfpath) data = ds.GetRasterBand(N).ReadAsArray().astype(numpy.uint16)

N是你感兴趣的数据的波段编号。你可以试着用QGIS或ENVI打开它,看看HDF文件的结构。

记住,波段编号是从1开始的,而不是从0开始。第一个波段是1。

希望这能帮到你。

5

使用HDF文件时,有个小窍门就是你大多数时候需要的是一个特定的子数据集。如果你使用GDAL这个工具,你需要直接打开指向那个子数据集的HDF文件:

import gdal
import matplotlib.pyplot as plt

ds = gdal.Open('HDF4_SDS:UNKNOWN:"MOD021KM.A2013048.0750.hdf":6')
data = ds.ReadAsArray()
ds = None

fig, ax = plt.subplots(figsize=(6,6))

ax.imshow(data[0,:,:], cmap=plt.cm.Greys, vmin=1000, vmax=6000)

enter image description here

你也可以先打开“主”HDF文件,查看里面的子数据集,然后再进行操作:

# open the main HDF
ds = gdal.Open('MOD021KM.A2013048.0750.hdf')

# get the path for a specific subdataset
subds = [sd for sd, descr in ds.GetSubDatasets() if descr.endswith('EV_250_Aggr1km_RefSB (16-bit unsigned integer)')][0]

# open and read it like normal
dssub = gdal.Open(subds)
data = dssub.ReadAsArray()
dssub = None

ds = None

撰写回答