HDF__气象

一 

 first of all ,强烈建议大家系统的学习HDF官方文档!!!

Python: module pyhdf.VS (sourceforge.net)

了解HDF包的组成

 具体信息见:一分钟看明白pyhdf包的组成 (baidu.com)

                        pyhdf读取方法汇总 - Rser_ljw - 博客园 (cnblogs.com)

                       一分钟看明白pyhdf包读写HDF数据集 (baidu.com) 

二 

import pprint 

hdf = SD('文件名')
print(hdf.info())  #(37, 7) 该文件包含37个科学数据集

1 SDS科学数据集信息读取 

data = hdf.datasets()
########################
for idx,sds in enumerate(data.keys()):
    print(idx,sds)
'''
0 Latitude
1 Longitude
2 Profile_Time
3 Profile_UTC_Time
4 Day_Night_Flag
5 IGBP_Surface_Type
6 Minimum_Laser_Energy_532
7 Profile_ID
'''
########################  更详细
data

2 变量粗略数据读取

###################################
lat = hdf_obj.select('latitude')[:] #知道SDS的确切名称,可以将数据存储在一个SDS中
################################### 数据维度未知
la = hdf_obj.select('latitude') #select 选定读取的变量名
lat = la.get() #获取数据的具体数值

3 变量具体信息读取(变量属性)

import pprint
##############
pprint.pprint(lat.attributes())
##############
print(lat.attributes())
##############  具体版
attr = Map.attributes(full =1)
'''
{'units': ('NoUnits', 0, 4, 7),
 'format': ('Float_32', 1, 4, 8),
 'valid_range': ('0.0...3.0', 2, 4, 9),
 'fillvalue': (-9999.0, 3, 5, 1)}
'''
attNamesS = attr.keys() #dict_keys(['units', 'format', 'valid_range', 'fillvalue'])
fill_value = attr['fillvalue'][0] #-9999.0

Q:这里的full=1什么意思
Q:(-9999.0, 3, 5, 1)分别 代表什么

三 官方文档重要翻译

网站位置:PyHDF (hdfeos.org)

 C API in that most functions have similar names and functionality. Although most function names are the same as or similar to corresponding C APIs, they are categorized into a few classes. For example, the SD API is divided into five Python classes, including SDSDSSDim and SDAttr.

C API,因为大多数函数都有类似的功能,名称和功能。虽然大多数函数名称与或类似于相应的 C API,它们分为几个类。例如,SD API 分为五个 Python 类, 包括SDSDSSDimSDAttr

HOW TO READ AND VISUALIZE

If you have installed PyHDF successfully, you can read and visualize NASA HDF4 products. First, please make sure that you have installed basemapmatplotlib, and numpy modules and import them before pyhdf as shown in Figure 2. For example, if Python fails to load basemap module, you can install one using . conda install basemap

如果您已成功安装PyHDF,则可以阅读和可视化NASA HDF4产品。首先,请确保您已经安装了basemapmatplotlib 和numpy模块,并在pyhdf之前导入它们。

import os
import matplotlib as mpl
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
import numpy as np
from pyhdf.SD import SD, SDC

Next, open theHDF-EOS2 file and read datasets .PyHDF supports HDF4 Vgroup, SDS, and Vdata interfaces but we focus on SDS because many NASA datasets are stored in SDS.

PyHDF支持HDF4 Vgroup,SDS和Vdata接口,但我们专注于SDS,因为许多NASA数据集存储在SDS中。

"""
Copyright (C) 2014 The HDF Group

This example code illustrates how to access and visualize a GESDISC AIRS 
HDF-EOS2 Grid in Python (PyHDF).

If you have any questions, suggestions, or comments on this example, please use
the HDF-EOS Forum (http://hdfeos.org/forums).  If you would like to see an
example of any other NASA HDF/HDF-EOS data product that is not listed in the
HDF-EOS Comprehensive Examples page (http://hdfeos.org/zoo), feel free to
contact us at eoshelp@hdfgroup.org or post it at the HDF-EOS Forum
(http://hdfeos.org/forums).

Usage:  save this script and run

    python AIRS.py

The AIRS HDF-EOS2 file must either be in your current working directory
 or in a directory specified by the environment variable HDFEOS_ZOO_DIR.

"""


import os
import matplotlib as mpl
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
import numpy as np
from pyhdf.SD import SD, SDC

# Open file.
FILE_NAME = 'AIRS.2002.08.01.L3.RetStd_H031.v4.0.21.0.G06104133732.hdf'
hdf = SD(FILE_NAME, SDC.READ)

# List available SDS datasets.
# print hdf.datasets()

# Read dataset.
DATAFIELD_NAME='RelHumid_A'
data3D = hdf.select(DATAFIELD_NAME)
data = data3D[11,:,:]

# Read geolocation dataset.
lat = hdf.select('Latitude')
latitude = lat[:,:]
lon = hdf.select('Longitude')
longitude = lon[:,:]

# Handle fill value.
attrs = data3D.attributes(full=1)
fillvalue=attrs["_FillValue"]

# fillvalue[0] is the attribute value.
fv = fillvalue[0]
data[data == fv] = np.nan
data = np.ma.masked_array(data, np.isnan(data))

# Draw an equidistant cylindrical projection using the low resolution
# coastline database.
m = Basemap(projection='cyl', resolution='l',
            llcrnrlat=-90, urcrnrlat = 90,
            llcrnrlon=-180, urcrnrlon = 180)
m.drawcoastlines(linewidth=0.5)
m.drawparallels(np.arange(-90., 120., 30.), labels=[1, 0, 0, 0])
m.drawmeridians(np.arange(-180., 181., 45.), labels=[0, 0, 0, 1])
x, y = m(longitude, latitude)
m.pcolormesh(x, y, data)
cb = m.colorbar()
cb.set_label('Unit:%')

plt.title('{0}\n {1} at H20PrsLvls=11'.format(FILE_NAME, DATAFIELD_NAME))
fig = plt.gcf()
# Show the plot window.
# plt.show()

# Save plot.
pngfile = "{0}.py.png".format(FILE_NAME)
fig.savefig(pngfile)

四  可学习文档

如何使用python和pyhdf读取MODIS HDF4文件? (moonbooks.org)

Read MODIS HDF4 as xarray :Read MODIS HDF4 as xarray — FORCeS eScience course 2020 (nordicesmhub.github.io)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值