1。特長
ピラミッドは、ラスタデータの表示をスピードアップすることができ、性能を向上させるために使用することができます。ズームイン操作として、より細かい解像度レベルの各々が徐々に描画される; しかし、性能は同じままで、現在PIE SDK ピラミッド作成ラスタデータをサポートする、ラスタデータフォーマット関数以下ピラミッド作成導入。
2。関数の実装の注意事項
2.1理論的根拠やアイデアの実現
第一歩 |
ビルドピラミッドへのラスタデータを取得します |
第二のステップ |
使用BuildPyramidの構築ピラミッドのアルゴリズム |
2.2コアインターフェースおよびメソッド
インタフェース/ クラス |
メソッド/ プロパティ |
説明 |
SysDataSource :: RasterDatasetPtr |
GetPyramidLevel() |
ピラミッドレベルを取得します。 |
SysDataSource :: DatasetFactory |
OpenRasterDataset(...) |
ラスタデータセットを開きます。 |
SysAlgo :: AlgoFactory |
CreateAlgo |
アルゴリズムを作成します。 |
ExecuteAlgo |
アルゴリズムの実行 |
2.3サンプルコード
プロジェクトパス |
ディスクアドレスBaiduのクラウド/ PIE の典型的なプログラム/ 04 データ操作/ 14 ラスタデータ作成ピラミッド |
データパス |
ディスクアドレスBaiduのクラウド/ PIE の典型的なデータ/ ラスタデータ/04.World/World.tif |
ビデオパス |
Baiduのクラウドディスクアドレスの下に/ PIEのビデオチュートリアル/ 04 データ操作/ 14 ラスタデータピラミッドを作成する.AVI |
サンプルコード |
|
空PIEMainWindow :: On_ActionBuildPyramid_Triggered (ブール値をチェックします) { QStringのフィルタを= "ラスターファイル(*。TIF * .TIFF * .imgの* .BMP * .JPG *。LDF * .DAT * .1bd * .1b)" 。 QStringのtiffPath = QFileDialog :: GetOpenFileName関数(nullptr 、" 添加数据" 、"" 、フィルタ) もし(tiffPath 。のisEmpty ())のリターン; SysDataSource :: RasterDatasetPtr rasterDataSet = SysDataSource :: DatasetFactory :: インスタンス() - > OpenRasterDataset (tiffPath 、SysDataSource :: GA_ReadOnly )。 もし(rasterDataSet == nullptr )リターン。 int型のカウント= rasterDataSet - > GetPyramidLevel (); QMessageBox :: 情報(この、"プロンプト" 、QStringの("現在のピラミッドレベル:%1" )のArg (COUNT )、QMessageBox :: オクラホマ)。 //コールはピラミッドアルゴリズムを作成し、 SysAlgo :: ISysAlgo * ptrAlgo = SysAlgo :: AlgoFactory :: インスタンス() - > CreateAlgo ("ImagePyramidBuildAlgo" ); QStringList のfileList ; fileList 。追記(tiffPath )。 もし(ptrAlgo == nullptr ) { リターン; } ブースト:: 任意のANYDATA = のfileList 。 ptrAlgo - > SetParamsメソッド(ANYDATA ); ptrAlgo - > SetNameメソッド("ピラミッドの作成" )。 ブールフラグ= SysAlgo :: AlgoFactory :: インスタンス() - > 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(); } } |