下面展示 读取TRMM 3B43类
,实现
1.查看HDF文件属性
2.查看数据集的属性
3.读取数据集
4.计算月降雨量,原始数据为mm/h计算为mm/month。
class ReadAndWrite_Hdf2Tif:
def __init__(self,readFilename=None):
self.readFilename=readFilename
self.hdf = SD(self.readFilename)
# 查看HDF文件属性
def read_HDFAttribute(self):
attr = self.hdf.attributes(full=1)
attrNames = attr.keys()
attributesList=[]
for name in attrNames:
dict={}
t = attr[name]
dict={name:t[0]}
attributesList.append(dict)
print(attributesList)
self.hdf.end()
return attributesList
# 查看数据集的属性
def read_HDFDatasetAttribute(self):
#hdf=SD(self.readFilename)
dSets=self.hdf.datasets() #以字典形式显示数据集的文件名,行列号
dsName=dSets.keys() #为SD.SDS对象
for name in dsName:
ds=self.hdf.select(name)
t=dSets[name]
print(dSets)
self.hdf.end()
return dSets
# 读取HDF数据集
# def readHDFData(self,datasetName):
# hdf = SD(self.readFilename)
# dataset=self.hdf.select(datasetName).get()
# return dataset
# 以月降雨量读取TRMM数据
def readTRMMData(self):
#hdf = SD(self.readFilename)
TRMMdataset = self.hdf.select(datasetName).get()
monthArray=[31,28,31,30,31,30,31,31,30,31,30,31]
year=int(self.readFilename[self.readFilename.find('.')+1:self.readFilename.find('.')+5])
month=int(self.readFilename[self.readFilename.find('.')+5:self.readFilename.find('.')+7])
if year==2008:
monthArray[1]=29
im_data=TRMMdataset*monthArray[month-1]*24 #数据单位为mm/hour将数据转为每月降水量
im_data=np.fliplr(im_data).T #数据原点为西南,需要进行数据翻转
np.putmask(im_data, im_data < 0, None) # 将小于0数据置为None
del TRMMdataset
self.hdf.end()
return im_data