PIE-SDK For C++打开自定义栅格数据

1、数据介绍

   信息提取和解译的过程中,经常会生成一部分中间临时栅格数据,这些数据在执行完对应操作后就失去了存在的价值,针对这种情况,PIE增加了内存栅格数据集,来协助用户完成对自定义栅格数据的读取和显示。下面以一副影像数据的抠图算法来演示自定义栅格数据的应用。

2、实现思路及原理说明

第一步

打开原始栅格数据;

第二步

读取部分数据至内存中,设置读取的起始点、读取范围等参数;

第三步

建立栅格内存数据集;

第四步

将内存中的数据写入内存数据集;

第五步

通过内存数据集创建栅格图层;

第六部

添加栅格图层到地图并刷新;

3、核心接口与方法

接口/

方法

说明

 

 

SysDataSource::RasterDatasetPtr

GetBandCount()

获取波段个数

GetRasterBand()

获取指定索引的波段

Read()

将数据读取至内存中

Write()

将内存数据写入栅格数据集中

SetGeoTransform

设置六参数

SpatialReference

空间参考

GetGeoTransform

获取六参数

SysDataSource::DatasetFactory

CreateRasterDataset()

创建栅格数据集

4、示例代码

项目名称

百度云盘地址下/PIE示例程序/03.数据加载/11.打开自定义栅格数据

数据位置

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

视频位置

百度云盘地址下/PIE视频教程/03.数据加载/11.打开自定义栅格数据.avi

示例代码

方法(一)打开自定义栅格数据

void PIEMainWindow::On_ActionGetMemRaster_Triggered(bool checked)

{

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

    if (rasterLayerPtr == nullptr) return;

    //1、获取源Dataset

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

    int mWidth = 500;

    int mHeigh = 600;

    int count = sourceRasterPtr->GetBandCount();

    double* geoTrans = new double[6];

    sourceRasterPtr->GetGeoTransform(geoTrans);

    QVector<int> bandMap;

    int* bandList = new int[count];

    

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

    {

        bandMap.insert(i, i + 1);

        bandList[i] = i + 1;

    }

    //2、读取数据至内存

    SysDataSource::PixelBufferPtr bufferPtr=sourceRasterPtr->Read(0, 0, mWidth, mHeigh, mWidth, mHeigh, bandMap);

    //3、创建内存数据集

    SysDataSource::RasterDatasetPtr memRasterPtr = SysDataSource::DatasetFactory::Instance()->CreateRasterDataset("", mWidth, mHeigh, count,

        sourceRasterPtr->GetRasterBand(0)->GetRasterDataType(), "MEM");

    if (memRasterPtr!=nullptr)

    {

        bool ok=memRasterPtr->Write(0, 0, mWidth, mHeigh, bufferPtr->GetData(), mWidth, mHeigh, sourceRasterPtr->GetRasterBand(0)->GetRasterDataType(),

            count, bandList);

        if (ok)

        {

            //4、设置空间参考和仿射变换参数

            memRasterPtr->SetSpatialReference(sourceRasterPtr->GetSpatialReference());

            memRasterPtr->SetGeoTransform(geoTrans);

 

            SysCarto::LayerPtr memLayer = SysCarto::LayerFactory::CreateDefaultRasterLayer(memRasterPtr);

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

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

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

        }

    }

}

5、示例截图

前后对比图如下

 

posted @ 2020-02-26 17:42  PIESAT  阅读(270)  评论(0编辑  收藏  举报