上周一个朋友拜托我帮它处理下遥感数据,拿到手一看,发现文件格式.h5,但是以往接触的遥感数据格式基本为.tif,带着好奇上网查了一下,
维基百科对它的解释:
HDF:层级数据格式(Hierarchical Data Format)是设计用来存储和组织大量数据的一组文件格式(HDF4,HDF5)。它最初开发于美国国家超级计算应用中心,现在由非营利社团HDF Group支持,其任务是确保HDF5技术的持续开发和存储在HDF中数据的持续可访问性。
从网上得知.H5是HDF格式的一个版本,对于这种格式的读写,Python有其专门的模块提供支持。
一个HDF5文件就是一个容器,用于储存两类对象:datasets,类似于数组的数据集合;groups,类似于文件夹的容器,可以储存datasets和其它groups,groups类似于字典(dictionaries),dataset类似于Numpy中的数组(array)。
得到的这个对象并不是数组,而是HDF5 dataset,但它和Numpy的数组结构很相似,具有形状(shape)和数据类型(datatype)
和数组相似的切片操作。
将影像数据从中提取出来,然后转为Numpy数组,为后续分析作准备,
提取出一份影像的矩阵数据,使用Matplotlib 作可视化 发现影像中间有一个空洞,一开始以为是我处理不当导致,后来发现是数据的问题。
H5保存为TIF
我朋友的目标文件格式是.tif,以便于在GIS软件进行空间分析。将矩阵保存为.tif文件需要gdal库的支持,有一个很重要的问题,但他给我的数据里没有元数据,也就是参考坐标、地理范围、空间分辨率等信息一概没有,如果空间分析中叠加其他数据,就是个大麻烦。
到上一步,提取就全部完成,最后为了直观地展示2012-2020年间北极地区的海冰密度变化,借用Matplotlib库,基于2013年间的时间序列数据,做一个小动画。
制作基本的动画的步骤如下:
- 创建画布和坐标系对象
- 定义updateFig函数,修改画布数据
- 调用FuncAnimation函数创建动画
参考:
1.https://docs.h5py.org/en/stable/
2.https://zh.wikipedia.org/wiki/HDF
3.https://segmentfault.com/a/1190000016670881