1、データ・プレゼンテーション
しばしばこのような状況のために、存在の価値が失われた後の動作を実行する際に対応するステージングラスタデータの一部として生成された情報の抽出および解釈のプロセスは、PIEを支援するために、メモリラスタデータセットを増加しましたカスタムユーザーは、ラスタデータを読み取り、表示完了します。アルゴリズムのデモ・アプリケーションのカスタムラスタデータに画像データをマットの下に。
2、アイデアや理論的根拠の実現
第一歩 |
元のラスタデータを開きます。 |
第二のステップ |
一部のデータは、メモリに読み出し開始点の設定、読取範囲および他のパラメータを読み出します。 |
第三段階 |
ラスタ・メモリ・データ・セットの確立。 |
第四段階 |
データ・メモリは、メモリ・データ・セットに書き込まれます。 |
第五の工程 |
メモリ・データ・セットを介してラスタレイヤを作成します。 |
パートVI |
マップやリフレッシュにラスターレイヤーを追加します。 |
図3に示すように、コアインターフェースおよび方法
インタフェース/ クラス |
方法 |
説明 |
SysDataSource :: RasterDatasetPtr |
GetBandCount() |
バンドの数を取得します。 |
GetRasterBand() |
バンドのインデックスを取得します |
|
読んだ() |
メモリにデータを読み込むには |
|
書く() |
メモリデータは、ラスタデータセットに書き込まれます |
|
SetGeoTransform |
6つのパラメータの設定 |
|
SpatialReference |
空間参照 |
|
GetGeoTransform |
6つのパラメータ取得 |
|
SysDataSource :: DatasetFactory |
CreateRasterDataset() |
ラスタデータセットを作成します |
4、サンプルコード
プロジェクト名 |
ディスクアドレスBaiduのクラウド/ PIE の典型的なプログラム/ 03 データロード/ 11 オープンカスタムラスタデータ |
場所データ |
Baiduのクラウドディスクアドレス/データサンプルPIEの下で/ ラスター/ 04.World/World.tif |
動画の場所 |
Baiduのクラウドディスクアドレスの下で/ PIEのビデオチュートリアル/ 03 のロード/ 11 オープンカスタムラスタデータ.AVI |
サンプルコード |
|
メソッド()を開き、カスタムラスタデータ 空PIEMainWindow :: On_ActionGetMemRaster_Triggered (ブール値をチェックします) { SysCarto :: RasterLayerPtr rasterLayerPtr = m_pCurrentControl - > GetActiveView ()- > GetCurrentLayer (); もし(rasterLayerPtr == nullptr )リターン。 // 1、ソースへのアクセスデータセット SysDataSource :: RasterDatasetPtr sourceRasterPtr = rasterLayerPtr - > GetDataset (); int型mWidth = 500; int型mHeigh = 600; int型のカウント= sourceRasterPtr - > GetBandCount (); ダブル* geoTrans = 新しいダブル[6]。 sourceRasterPtr - > GetGeoTransform (geoTrans )。 QVector < 整数> bandMap 。 int型* バンドリスト= 新しいint型[ 回数]。
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、示例截图
前后对比图如下