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(); } } |