ICESat-2的全称是ICE,CLOUD,AND LAND ELEVATION SATELLITE-2
NASA于2018年9月发射,搭载激光载荷——先进地形激光测高系统(advanced topographic laser altimeter system,ATLAS),相较于上一代ICESat/GLAS有着更高的精度和更小的激光足印,测量能力大大提高。
其数据产品包括Level-1、Level-2、Level-3A、Level-3B共四级(具体情况看下图)
该图来自(曹彬才等,利用机载云点检核ICESat-2/ATLAS激光测高数据精度)
本次要处理的是内陆水位高程,所以下载的是ALT13数据
数据从EARTHDATA SEARCH网站下载https://search.earthdata.nasa.gov/search
右上角登录,左侧输入相应的筛选信息
选择相应的卫星数据(V004的精度比V003要高,根据自己的需要进行下载)
可以看到下载的都是H5格式文件
这里我们可以使用HDFView进行查看,下载地址为
Download HDFView
使用HDFView打开ALT13数据可查看相关内容(路径不能有中文,否则会报错)
随后使用anaconda软件对其数据进行预处理(需要安装geopandas)
安装步骤可看无敌小少年的相关文章
Anaconda Geopandas 小白安装指南 - 知乎 (zhihu.com)
最后输入相关代码对其进行处理,即可得到最后的成品(由于代码没有封装好,所以暂时就不上传了)
相应代码还可从下面的网站中获取
Examples (hdfeos.org)
下列是该网站对ALT13处理的示例代码
"""
This example code illustrates how to access and visualize an NSIDC
ICESat-2 ATL13 L2 HDF5 file in Python.
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 ATL13_20190330212241_00250301_002_01.h5.py
The HDF5 file must in your current working directory.
Tested under: Python 3.7.3 :: Anaconda custom (64-bit)
Last updated: 2020-01-21
"""
import os
import matplotlib as mpl
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import basemap
import numpy as np
import h5py
FILE_NAME = 'ATL13_20190330212241_00250301_002_01.h5'
with h5py.File(FILE_NAME, mode='r') as f:
latvar = f['/gt1l/segment_lat']
latitude = latvar[:]
lonvar = f['/gt1l/segment_lon']
longitude = lonvar[:]
dset_name = '/gt1l/segment_geoid'
datavar = f[dset_name]
data = datavar[:]
units = datavar.attrs['units']
long_name = datavar.attrs['long_name']
_FillValue = datavar.attrs['_FillValue']
# Handle FillValue
data[data == _FillValue] = np.nan
data = np.ma.masked_where(np.isnan(data), 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.))
m.drawmeridians(np.arange(-180, 180., 45.))
m.scatter(longitude, latitude, c=data, s=1, cmap=plt.cm.jet,
edgecolors=None, linewidth=0)
cb = m.colorbar(location='bottom')
units = units.decode('ascii', 'replace')
cb.set_label(units)
basename = os.path.basename(FILE_NAME)
long_name = long_name.decode('ascii', 'replace')
plt.title('{0}n{1}n{2}'.format(basename, dset_name, long_name))
fig = plt.gcf()
pngfile = "{0}.py.png".format(basename)
fig.savefig(pngfile)
对其稍作修改



