• PIE-SDK For C++栅格数据集的读写


    1.功能简介

       栅格数据包含很多信息,在数据的运用中需要对数据的信息进行读取或写入,目前PIE SDK支持多种数据格式的数据读取和写入,下面对栅格数据格式的数据读写功能进行介绍。

    2.功能实现说明

    2.1. 实现思路及原理说明

    第一步

    获取要读取的栅格数据

    第二步

    读取栅格数据

    第三步

    写入栅格数据并赋值投影

    2.2. 核心接口与方法

    接口/

    方法/属性

    说明

    RasterDatasetPtr

    GetBandCount()

    获取波段数

    GetRasterBand(int nIndex)

    获取栅格波段对象

    GetRasterDataType()

    获取栅格数据类型

    Read(int nx, int ny, int nWid, int nHei, int nBufXSize, int nBufYSize, const QVector<int>& bandMap)

    栅格数据集读取数据

    2.3. 示例代码

    项目路径

    百度云盘地址下/PIE示例程序/04数据操作/12栅格数据集的读写

    数据路径

    百度云盘地址下/PIE示例数据/栅格数据/04.World/World.tif

    视频路径

    百度云盘地址下/PIE视频教程/04数据操作/12栅格数据集的读写.avi

    示例代码

    void PIEMainWindow::On_ActionLayoutReadRaster_Triggered(bool checked)

    {

        SysCarto::RasterLayerPtr rasterLayerPtr = m_pCurrentControl->GetActiveView()->GetCurrentLayer();

        if (rasterLayerPtr == nullptr) return;

        SysDataSource::RasterDatasetPtr rasterDataSetPtr = rasterLayerPtr->GetDataset();

        int BandCount = rasterDataSetPtr->GetBandCount();

        SysDataSource::RasterBandPtr band = rasterDataSetPtr->GetRasterBand(0);

        SysDataSource::PixelDataType bandType= band->GetRasterDataType();

     

        QVector<int> vectorBand;

        int* bandMap = new int[BandCount];

        for (int i = 0; i < BandCount; i++)

        {

            bandMap[i] = i + 1;

            vectorBand.insert(i, i + 1);

        }

        SysDataSource::PixelBufferPtr buffer= rasterDataSetPtr->Read(0, 0, 500, 500, 500, 500, vectorBand);

     

        /*将读取到的数据,写入内存数据集,并加载至图层*/

        SysDataSource::RasterDatasetPtr newDataSet = SysDataSource::DatasetFactory::Instance()->CreateRasterDataset("", 500, 500        , BandCount, rasterDataSetPtr->GetRasterBand(0)->GetRasterDataType(), "MEM");

        double* geo = new double[6];

        rasterDataSetPtr->GetGeoTransform(geo);

        newDataSet->SetSpatialReference(rasterDataSetPtr->GetSpatialReference());

        newDataSet->SetGeoTransform(geo);

        bool flag = newDataSet->Write(0, 0, 500, 500, buffer->GetData(), 500, 500, bandType, BandCount, bandMap);

        if (flag)

        {

            SysCarto::RasterLayerPtr newLayer = SysCarto::LayerFactory::Instance()->CreateDefaultRasterLayer(newDataSet);

            newLayer->SetName("内存图层");

            m_pCurrentControl->GetMap()->AddLayer(newLayer);

            m_pCurrentControl->GetActiveView()->Refresh();

        } 

    }

    2.4. 示例截图

  • 相关阅读:
    poj2411
    poj2403
    poj2479
    poj2593
    跟着B站UP主小姐姐去华为坂田基地采访扫地僧
    云小课 | 不小心删除了数据库,除了跑路还能咋办?
    GaussDB(for MySQL)如何在存储架构设计上做到高可靠、高可用
    华为侯金龙:打造行业智能体,共建全场景智慧
    华为轮值董事长郭平2020全联接大会主题演讲:永远面向阳光,阴影甩在身后
    【API进阶之路】太秃然了,老板要我一周内检测并导入一万个小时的视频
  • 原文地址:https://www.cnblogs.com/PIESat/p/12373289.html
Copyright © 2020-2023  润新知