PIE-SDK For C++栅格数据的金字塔创建

1.功能简介

    金字塔可用于改善性能,可以加快栅格数据的显示速度。随着放大操作的进行,各个更精细的分辨率等级将逐渐得到绘制;但性能将保持不变;目前PIE SDK支持栅格数据的金字塔创建,下面对栅格数据格的金字塔创建的功能进行介绍。

2.功能实现说明

2.1 实现思路及原理说明

第一步

获取要建立金字塔的栅格数据

第二步

利用BuildPyramid算法进行建立金字塔

2.2 核心接口与方法

接口/

方法/属性

说明

SysDataSource::RasterDatasetPtr

GetPyramidLevel()

获取金字塔级别

SysDataSource::DatasetFactory

OpenRasterDataset (…)

打开栅格数据集

SysAlgo::AlgoFactory

CreateAlgo

创建算法

ExecuteAlgo

执行算法

2.3 示例代码

项目路径

百度云盘地址下/PIE示例程序/04数据操作/14栅格数据创建金字塔

数据路径

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

视频路径

百度云盘地址下/PIE视频教程/04数据操作/14栅格数据创建金字塔.avi

示例代码

void PIEMainWindow::On_ActionBuildPyramid_Triggered(bool checked)

{

    QString filter = "Raster Files (*.tif *.tiff *.img *.bmp *.jpg *.ldf *.dat *.1bd *.1b)";

    QString tiffPath = QFileDialog::getOpenFileName(nullptr, "添加数据", "", filter);

    if (tiffPath.isEmpty()) return;

    SysDataSource::RasterDatasetPtr rasterDataSet = SysDataSource::DatasetFactory::Instance()->OpenRasterDataset(tiffPath, SysDataSource::GA_ReadOnly);

    if (rasterDataSet == nullptr) return;

    int count = rasterDataSet->GetPyramidLevel();

    QMessageBox::information(this, "提示", QString("当前金字塔级别:%1").arg(count), QMessageBox::Ok);

    //调用创建金字塔算法

    SysAlgo::ISysAlgo* ptrAlgo= SysAlgo::AlgoFactory::Instance()->CreateAlgo("ImagePyramidBuildAlgo");

    QStringList fileList;

    fileList.append(tiffPath);

    if (ptrAlgo==nullptr)

    {

        return;

    }

    boost::any anyData = fileList;

    ptrAlgo->SetParams(anyData);

    ptrAlgo->SetName("创建金字塔");

    bool flag=SysAlgo::AlgoFactory::Instance()->ExecuteAlgo(ptrAlgo);

    rasterDataSet = nullptr;

    rasterDataSet = SysDataSource::DatasetFactory::Instance()->OpenRasterDataset(tiffPath, SysDataSource::GA_ReadOnly);

    int level= rasterDataSet->GetPyramidLevel();

    QMessageBox::information(this, "提示", QString("当前金字塔级别:%1").arg(level), QMessageBox::Ok);

    SysCarto::LayerPtr layerPtr = SysCarto::LayerFactory::Instance()->CreateDefaultLayer(tiffPath);

    if (layerPtr !=nullptr)

    {

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

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

    }

}

posted @ 2020-02-27 17:47  PIESAT  阅读(470)  评论(0编辑  收藏  举报