2014-03-28 49 views
1

我已經試過並搜索如何解決這個問題,但仍然無法找到如何讀取和繪製在gdal和來自給定的Modis Aqua .hdf文件的matplotlib。任何幫助深表感謝。順便說一句,在Windows 7中使用Python 2.7.5。文件名是A2014037040000.L2_LAC.SeAHABS.hdf。在hdf文件的地球物理數據中,我只會使用chlor_a。閱讀/打開一個modis aqua .hdf文件,並在gdal和matplotlib中顯示/繪製輸出

更新:

以下是樣本文件的鏈接。

A2014037040500.L2_LAC.SeAHABS.hdf

回答

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 
+0

**我曾嘗試你的腳本以上,但出現錯誤,** _ >>> import gdal_ _ >>> import matplotlib.pyplot as plt_ _ >>> _ _ >>> ds = gdal.Open(「A2014037040500.L2_LAC.SeAHABS.hdf」)_ _ >>> data = ds.ReadAsArray()'_ **回溯(最近一次通話的最後一次): 數據= ds.ReadAsArray() AttributeError:'NoneType'對象沒有屬性'ReadAsArray'** – doo

+0

這意味着變量ds是None,這意味着gdal無法打開它。您可能提供了錯誤的位置或其他東西,或者您的gdal構建沒有必要的驅動程序。嘗試在其上運行gdalinfo,這應該會提供更清晰的錯誤消息。發生 –

+0

錯誤: 回溯(最近最後調用): 文件 「C:\路徑\到\文件\ 1.py」,第5行,在 數據= ds.ReadAsArray() 文件「C:\ Python27 \ lib \ site-packages \ osgeo \ gdal.py「,行729,在ReadAsArray 返回gdalnumeric.DatasetReadAsArray(self,xoff,yoff,xsize,ysize,buf_obj) 文件」C:\ Python27 \ lib \ packages \ osgeo \ gdal_array.py「,第175行,在DatasetReadAsArray中 datatype = ds.GetRasterBand(1).DataType AttributeError:'NoneType'對象沒有屬性'DataType' – doo

1

您應該嘗試設置MODIS數據集的數據類型。我估計是無符號的16位

DS = gdal.Open(hdfpath) 數據= ds.GetRasterBand(N).ReadAsArray()。astype(numpy.uint16)

N是爲帶編號的感興趣的數據。您可以嘗試使用QGIS或ENVI打開它以查看HDF文件的結構。

記住帶從1開始,而不是爲0。首先帶爲1

希望它可以幫助

相關問題