我已经尝试并搜索如何解决这个问题,但仍然找不到如何从给定的 Modis Aqua .hdf 文件中读取和绘制 gdal 和 matplotlib 的方法。任何帮助深表感谢。顺便说一句,我在 Windows 7 中使用 Python 2.7.5。文件名是A2014037040000.L2_LAC.SeAHABS.hdf
。在 hdf 文件的地球物理数据中,我只会使用 chlor_a。
更新:
这是示例文件的链接。
我已经尝试并搜索如何解决这个问题,但仍然找不到如何从给定的 Modis Aqua .hdf 文件中读取和绘制 gdal 和 matplotlib 的方法。任何帮助深表感谢。顺便说一句,我在 Windows 7 中使用 Python 2.7.5。文件名是A2014037040000.L2_LAC.SeAHABS.hdf
。在 hdf 文件的地球物理数据中,我只会使用 chlor_a。
更新:
这是示例文件的链接。
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)
您还可以打开“主”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
您应该尝试为 MODIS 数据集设置数据类型。我猜它是 16 位无符号的
ds= gdal.Open(hdfpath) 数据 = ds.GetRasterBand(N).ReadAsArray().astype(numpy.uint16)
N 是您感兴趣的数据的波段编号。您可以尝试使用 QGIS 或 ENVI 打开它以查看 HDF 文件的结构。
请记住,波段从 1 开始,而不是 0。第一个波段是 1。
希望能帮助到你