前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >GDAL读取MODIS影像

GDAL读取MODIS影像

作者头像
卡尔曼和玻尔兹曼谁曼
发布2019-01-22 10:30:01
1.1K0
发布2019-01-22 10:30:01
举报

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

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

GDALINFO MODIS
GDALINFO MODIS

在C++代码中我们只需要读取元数据信息,提取出Dataset子数据集的路径就可以了! 代码如下:(其中用到的readGeoRaster函数用于输出Dataset的一些地理信息,具体实现参见Hello GDAL(简单的GDAL入门程序)

代码语言:javascript
复制
int main(int argc, char* argv[])
{
    const char* pszFileName = argv[1];  // 从命令行传入MODIS数据文件路径
    GDALAllRegister();
    GDALDataset* poDataset = static_cast<GDALDataset*>(GDALOpen(pszFileName, GA_ReadOnly));
    if (!poDataset)
    {
        cout << "影像读取失败:" << pszFileName << "!" << '\n';
        return EXIT_FAILURE;
    }

    char** metadata = poDataset->GetMetadata("SUBDATASETS");
    vector<string> vtDatasets;
    // 我们可以将HDF数据看做一个容器,容器里面包含了很多具体的子Dataset,所以我们首先要取出子数据集的地址
    // 元数据metadata中保存的信息中,奇数索引的信息是子数据的地址,偶数索引的信息是该子数据的其它信息
    if (0 < CSLCount(const_cast<const char* const*>(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 EXIT_SUCCESS;
}

输出如下:

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017年03月15日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档