GDAL读取MODIS影像

网友投稿 1114 2022-10-11

GDAL读取MODIS影像

GDAL读取MODIS影像

MODIS影像以HDF4或者HDF5格式进行存储。关于如何搭建开发环境,参见​​Ubuntu下GDAL读取HDF4(MODIS影像)开发环境搭建​​。

我们可以将HDF数据看做一个容器,容器里面包含了很多具体的Dataset子集,所以我们首先要取出子数据集的地址。元数据信息可以通过GDAL获取,HDF的元数据信息中(将元数据信息保存在一个字符串数组中),奇数索引的信息是子数据集的地址,偶数索引的信息是该子数据集的其它信息(名称等)。

元数据示例如下:

在C++代码中我们只需要读取元数据信息,提取出Dataset子数据集的路径就可以了!

代码如下:(其中用到的readGeoRaster函数用于输出Dataset的一些地理信息,具体实现参见​​Hello GDAL(简单的GDAL入门程序)​​)

int main(int argc, char* argv[]){ const char* pszFileName = argv[1]; // 从命令行传入MODIS数据文件路径 GDALAllRegister(); GDALDataset* poDataset = static_cast(GDALOpen(pszFileName, GA_ReadOnly)); if (!poDataset) { cout << "影像读取失败:" << pszFileName << "!" << '\n'; return EXIT_FAILURE; } char** metadata = poDataset->GetMetadata("SUBDATASETS"); vector vtDatasets; // 我们可以将HDF数据看做一个容器,容器里面包含了很多具体的子Dataset,所以我们首先要取出子数据集的地址 // 元数据metadata中保存的信息中,奇数索引的信息是子数据的地址,偶数索引的信息是该子数据的其它信息 if (0 < CSLCount(const_cast(metadata))) { for (int i = 0; metadata[i]; i += 2) { string strDSName(metadata[i]); cout << strDSName << '\n'; strDSName = strDSName.substr(strDSName.find_first_of('=') + 1); vtDatasets.push_back(strDSName); } } GDALClose(poDataset); for (auto name : vtDatasets) { const char* pszDSName = name.c_str(); cout << "数据路径:" << pszDSName << '\n'; readGeoRaster(pszDSName); } return

输出如下:

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:JS API模块之view
下一篇:Grafana9.0发布,Prometheus和Loki查询生成器、全新导航、热图面板等新功能!
相关文章

 发表评论

暂时没有评论,来抢沙发吧~