PIE-SDKの場合Cは、カスタムラスタデータを開く++

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、示例截图

前后对比图如下

 

おすすめ

転載: www.cnblogs.com/PIESat/p/12368098.html