MODIS 遥感产品数据处理及转换
0x00 缘起
目前想要复现 Convective potential and fuel availability complement near-surface weather in regulating global wildfire activity 中关于野火燃烧研究内容。使用的数据产品是 MODIS 中的 1 公里分辨率野火产品数据,产品号为 MOD14A1.061,时间跨度约为 2000 年 2 月~现在。数据为分片的 HDF 文件。由此引出将多个 HDF 分片进行时空聚合,转换为更为通用的 NetCDF 需求,具体实现思路如下:
- 批量下载
HDF文件,并将其转换为NC格式 - 将
NC按时间进行整理,并进行合并 - 针对本文研究的复现,由于技术极为简单,本次不予讨论
0x01 Easy Way
感谢学弟提供的网站,不得不说 NASA APPEEARS 真的不错,提供包括 NetCDF、GeoTIFF 在内的多种非 HDF 格式文件。
可以直接查询数据产品是否在其中,本次研究的内容不在其中,因此直接放弃。
补充:后来帮助别人下载了相关的数据,对应产品是 MOD13A2.061,1km 16 天 NDVI 数据。最大处理容量约为 3/4 个北半球,时间范围为 2000 ~ 2020 年。以供参考。
0x02 诶卧槽 HDF 怎么那么坏啊
层级数据格式(Hierarchical Data Format:HDF)是设计用来存储和组织大量数据的一组文件格式(HDF4,HDF5)。它最初开发于美国国家超级计算应用中心,现在由非营利社团 HDF Group 支持,其任务是确保 HDF5 技术的持续开发和存储在 HDF 中数据的持续可访问性。
伴随着这个目标,HDF 库和相关工具可在自由的类 BSD 许可证下获得用于一般使用。HDF 被很多商业和非商业软件平台所支持,包括 Java、MATLAB、Scilab、Octave、Mathematica、IDL、Python、R、Fortran 和 Julia。可免费获得的 HDF 发行中包括了库,命令行实用程序,测试包源代码,Java 接口,和基于 Java 的 HDF 查看器(HDFView)。
当前版本是 HDF5,在设计和 API 上与主要的遗留版本 HDF4 有显著区别。
维基百科
我的评价是依托,在可用性上比不上 NetCDF 一点,GIS 支持依托,找了一些转换工具(参考文献中)也是依托,这些里面基本没有可用的工具。现代推荐工具是 GDAL、xarray 等,但它们对 MODIS HDF 的支持仍有限。
曾经的思路是将其转换为 GeoTIFF,然后将其拼接成 NC。直到发现了新的软件 Hydrax。本质上是一个内容分享服务器,转换只是附送的。作为服务器,也更容易通过发送 HTTP 请求来获取,反而降低了工作负荷。
Hyrax 采用 docker 部署,特别注意的是,需要自行设定 /usr/share/hyrax 挂载目录作为数据目录。
最后用一个小脚本获取转换后的 nc4 链接。
1 | |
0x03 缝合及转换
在这里需要进行时空聚合,直接采用较为简单的代码拼接即可完成,但是需要注意写入 CF 描述以让 GIS 正确读取,并且设定合理的压缩参数以减少不必要的空间占用。示例代码如下:
1 | |
需要注意的是该产品存在时间重合现象,需要额外的代码进行处理,以避免时间步长信息冲突问题。
事先声明:本文处理方法并不符合最佳实践。合理的方式还是按照曲线网格(curvilinear grid)处理以保留更高精度。
本文处理的原因是出于数据兼容考虑,其他数据均采用规则网格。而通过观察研究区发现,曲线网格也基本保持规则网格分布,因此多了一步转换。
GPT 的代码写的很烂,于是采用了较为愚笨的方法:将其按照步长转换为 GeoTIFF,随后再拼接回 NetCDF,脚本如下:
1 | |
至此,初步处理已经完成。
0x04 TL;DR
- 大部分数据可以通过 NASA APPEEARS 获取处理好的文件。
- Hydrax 已经被证明是一种稍显麻烦但极为有效的 NC 转换工具。
- 对于数据需要合理拼合,去除重复步长,如有需要可将曲线网格转换为规则网格。