GDAL C++ API ラーニングパス (3) GDALRasterBand コードサンプル翻訳独習

GDALRasterBand クラス <gdal_priv.h>

GDALRasterBand は、ラスター データセット内のバンドを表すために GDAL で使用されるクラスです。通常、ラスター データセットは複数のバンドで構成されており、各バンドには標高、赤、緑、青などの特定のデータ情報が含まれています。

画像のさまざまな特徴を表すために使用されます。バンドのピクセル データおよび関連情報にアクセスして操作するために、多数の関数が提供されています。これは、GDAL C++ API でラスター データを処理するためのコア クラスの 1 つであり、ラスター データの処理と分析に強力な機能と柔軟性を提供します。
 

公的行事

塗りつぶし

仮想 CPLErr  Fill (double dfRealValue、double dfImaginaryValue = 0 )

このバンドを定数値で埋める

パラメータ:

  • dfRealValue  -- 塗りつぶし値の実数成分

  • dfImaginaryValue  -- パディング値の虚数部、デフォルトはゼロ

戻り値: 書き込みが失敗した場合は CE_Failure、それ以外の場合は CE_None

    // 获取第一个波段
    GDALRasterBand* band = dataset->GetRasterBand(1);

    // 填充波段的像素值为指定的实部和虚部值
    double realValue = 100.0;
    double imaginaryValue = 50.0;
    CPLErr err = band->Fill(realValue, imaginaryValue);

SetNoDataValue

仮想 CPLErr  SetNoDataValue (double dfNoData )

このバンドにはデータ値を設定しません

パラメータ:

dfNoData  -- 設定する値。

戻り値: 成功の場合は CE_None、失敗の場合は CE_Failure。ドライバーがサポートしていない場合は、エラー メッセージを発行せずに CE_Failure を返します。

    // 获取第一个波段
    GDALRasterBand* band = dataset->GetRasterBand(1);

    // 设置无数据值
    double noDataValue = -9999.0;
    CPLErr err = band->SetNoDataValue(noDataValue);

SetNoDataValueAsInt64

仮想 CPLErr  SetNoDataValueAsInt64 (int64_t nNoData )

このバンドにデータなしの値を設定します。

このメソッドは、データ型 GDT_Int64 のラスターに対してのみ呼び出す必要があります。

SetNoDataValueAsUInt64

仮想 CPLErr  SetNoDataValueAsUInt64 (uint64_t nNoData )

このバンドにデータなしの値を設定します。

このメソッドは、データ型 GDT_UInt64 のラスターに対してのみ呼び出す必要があります。

削除NoDataValue

仮想 CPLErr  DeleteNoDataValue ( )

このバンドのデータ値を削除しません

戻り値: 成功の場合は CE_None、失敗の場合は CE_Failure。ドライバーがサポートしていない場合は、エラー メッセージを発行せずに CE_Failure を返します。

    // 获取第一个波段
    GDALRasterBand* band = dataset->GetRasterBand(1);

    // 删除无数据值
    CPLErr err = band->DeleteNoDataValue();

SetColorTable

仮想 CPLErr  SetColorTable (GDALColorTable *poCT )

ラスターカラーマップを設定する

パラメータ:

poCT  – 適用するカラーマップ。これを NULL にすると、カラー テーブルがクリアされます (サポートされている場合)。

戻り値: 成功の場合は CE_None、失敗の場合は CE_Failure。ドライバーがその操作をサポートしていない場合、値 CE_Failure が返されますが、エラーは発行されません。

    // 获取第一个波段
    GDALRasterBand* band = dataset->GetRasterBand(1);

    // 创建颜色表并添加颜色项
    GDALColorTable* colorTable = new GDALColorTable(GPI_RGB);
    GDALColorEntry colorEntry;

    colorEntry.c1 = 255; // 红色分量
    colorEntry.c2 = 0;   // 绿色分量
    colorEntry.c3 = 0;   // 蓝色分量
    colorEntry.c4 = 255; // Alpha(透明度)分量
    colorTable->SetColorEntry(0, &colorEntry); // 将像素值为 0 的颜色设置为红色

    colorEntry.c1 = 0;   // 红色分量
    colorEntry.c2 = 255; // 绿色分量
    colorEntry.c3 = 0;   // 蓝色分量
    colorEntry.c4 = 255; // Alpha(透明度)分量
    colorTable->SetColorEntry(1, &colorEntry); // 将像素值为 1 的颜色设置为绿色

    // 设置颜色表
    CPLErr err = band->SetColorTable(colorTable);

SetColorInterpret

仮想 CPLErr  SetColorInterpret ( GDALColorInterp  eColorInterp  )

バンドの色の解釈を設定します。

パラメータ:

eColorInterp  -- このバンドの新しいカラーインタープリタ。

戻り値: 成功した場合は CE_None、フォーマットがメソッドをサポートしていない場合は CE_Failure

    // 获取第一个波段
    GDALRasterBand* band = dataset->GetRasterBand(1);

    // 设置颜色解释为红色
    CPLErr err = band->SetColorInterpret(GCI_RedBand);

セットオフセット

仮想 CPLErr  SetOffset(double dfNewOffset

ズームオフセットを設定する

パラメータ:

dfNewOffset  -- 新しいオフセット。

戻り値: 成功または失敗の場合は CE_None または CE_Failure

    // 获取第一个波段
    GDALRasterBand* band = dataset->GetRasterBand(1);

    // 设置偏移值
    double newOffset = 100.0;
    CPLErr err = band->SetOffset(newOffset);

スケールの設定

仮想 CPLErr  SetScale(double dfNewScale

ズーム率を設定する

パラメータ:

dfNewScale  -- 新しいスケール。

戻り値: 成功または失敗の場合は CE_None または CE_Failure

    // 获取第一个波段
    GDALRasterBand* band = dataset->GetRasterBand(1);

    // 设置比例尺
    double newScale = 0.01;
    CPLErr err = band->SetScale(newScale);

SetUnitType

仮想 CPLErr  SetUnitType ( const  char *pszNewValue )

単位タイプの設定 ラスター バンドの単位タイプを設定します。値は「」(デフォルトは不明を意味します)、メートルの場合は「m」、フィートの場合は「ft」のいずれかである必要がありますが、他の非標準値も許可されます

パラメータ:

pszNewValue  -- 新しい単位タイプの値。

戻り値: 成功した場合は CE_None、失敗したかサポートされていない場合は CE_Failure

    // 获取第一个波段
    GDALRasterBand* band = dataset->GetRasterBand(1);

    // 设置单位类型
    const char* unitType = "meters";
    CPLErr err = band->SetUnitType(unitType);

統計の取得

仮想 CPLErr  GetStatistics(int bAboutOK、int bForce、double *pdfMin、double *pdfMax、double *pdfMean、double *padfStdDev

画像統計を取得する

このバンド内のすべてのピクセル値の最小値、最大値、平均値、標準偏差を返します。近似統計が十分な場合は、bAboutOK フラグを true に設定できます。その場合、概要タイルまたは画像タイルのサブセットを使用して統計を計算できます。

パラメータ:

  • bAboutOK  – すべてのスライスの概要またはサブセットから統計を計算できる場合は TRUE。

  • bForce  -- FALSE の場合、画像を再スキャンせずに統計のみが返されます。TRUE の場合、既存の値をすぐに取得できない場合に統計計算を強制します。

  • pdfMin  – 画像をロードする最小位置 (NULL の場合もあります)。

  • pdfMax  – 画像の最大値をロードする場所 (NULL の場合もあります)。

  • pdfMean  – 画像平均値をロードする場所 (NULL の場合もあります)。

  • pdfStdDev  – 画像の標準偏差をロードする場所 (NULL の場合もあります)。

戻り値: 成功した場合は CE_None、値が返されない場合は CE_Warning、エラーが発生した場合は CE_Failure

    // 获取第一个波段
    GDALRasterBand* band = dataset->GetRasterBand(1);

    // 获取波段的统计信息
    int bApproxOK = false; // 是否允许使用近似统计信息
    int bForce = true;     // 是否强制重新计算统计信息
    double pdfMin, pdfMax, pdfMean, padfStdDev;
    CPLErr err = band->GetStatistics(bApproxOK, bForce, &pdfMin, &pdfMax, &pdfMean, &padfStdDev);

    if (err == CE_None)
    {
        std::cout << "Statistics information:" << std::endl;
        std::cout << "Minimum: " << pdfMin << std::endl;
        std::cout << "Maximum: " << pdfMax << std::endl;
        std::cout << "Mean: " << pdfMean << std::endl;
        std::cout << "Standard Deviation: " << padfStdDev << std::endl;
    }
    else
    {
        std::cout << "Failed to get statistics information." << std::endl;
    }

統計を計算する

仮想 CPLErr  ComputeStatistics (int bAboutOK、double *pdfMin、double *pdfMax、double *pdfMean、double *pdfStdDev、  GDALProgressFunc、void *pProgressData )

画像統計の計算

このバンド内のすべてのピクセル値の最小値、最大値、平均値、標準偏差を返します。近似統計が十分な場合は、bAboutOK フラグを true に設定できます。その場合、概要タイルまたは画像タイルのサブセットを使用して統計を計算できます。

パラメータ:

  • bAboutOK  – すべてのスライスの概要またはサブセットから統計を計算できる場合は TRUE。

  • pdfMin  – 画像をロードする最小位置 (NULL の場合もあります)。

  • pdfMax  – 画像の最大値をロードする場所 (NULL の場合もあります)。

  • pdfMean  – 画像平均値をロードする場所 (NULL の場合もあります)。

  • pdfStdDev  – 画像の標準偏差をロードする場所 (NULL の場合もあります)。

  • pfnProgress  -- 進行状況または NULL を報告するために呼び出す関数。

  • pProgressData  -- 進行状況関数に渡すアプリケーション データ。

戻り値: 成功した場合は CE_None、エラーが発生した場合、またはユーザーが処理を終了した場合は CE_Failure

    // 获取第一个波段
    GDALRasterBand* band = dataset->GetRasterBand(1);

    // 计算波段的统计信息
    int bApproxOK = false; // 是否允许使用近似统计信息
    double pdfMin, pdfMax, pdfMean, pdfStdDev;
    CPLErr err = band->ComputeStatistics(bApproxOK, &pdfMin, &pdfMax, &pdfMean, &pdfStdDev, ProgressFunc, nullptr);

    if (err == CE_None)
    {
        std::cout << "Minimum: " << pdfMin << std::endl;
        std::cout << "Maximum: " << pdfMax << std::endl;
        std::cout << "Mean: " << pdfMean << std::endl;
        std::cout << "Standard Deviation: " << pdfStdDev << std::endl;
    }
    else
    {
        std::cout << "Failed to compute statistics." << std::endl;
    }

統計を設定する

仮想 CPLErr  SetStatistics (double dfMin、double dfMax、double dfMean、double dfStdDev )

バンド統計の設定 この方法は、ラスター バンドの最小/最大/平均/標準偏差統計を保存するために使用できます。

パラメータ:

  • dfMin  -- 最小ピクセル値。

  • dfMax  -- 最大ピクセル値。

  • dfMean  – すべてのピクセル値の平均 (平均)。

  • dfStdDev  -- すべてのピクセル値の標準偏差。

戻り値: 成功の場合は CE_None、失敗の場合は CE_Failure

    // 获取第一个波段
    GDALRasterBand* band = dataset->GetRasterBand(1);

    // 设置波段的统计信息
    double dfMin = 0.0;      // 最小值
    double dfMax = 255.0;    // 最大值
    double dfMean = 127.5;   // 均值
    double dfStdDev = 50.0;  // 标准差

    CPLErr err = band->SetStatistics(dfMin, dfMax, dfMean, dfStdDev);

SetStatisticsこの機能を使用すると、ユーザーは最小値、最大値、平均値、標準偏差などを含むバンドの統計を手動で設定できます。通常、統計はバンド データから計算されますが、データの視覚化または処理中にデータ範囲をより適切に制御するために、ユーザーが独自の統計を指定したい場合があります。

ユーザーが設定した統計は、データから計算された統計と不一致を引き起こす可能性があります。データの表示や処理に影響を与える可能性があります。したがって、統計を手動で設定する場合は、設定した値が実際のデータの分布と一致していることを確認する必要があります。

不一致を避けるために、手動で統計を設定する前にデータを前処理および分析し、設定値が合理的で実際の状況と一致していることを確認することをお勧めします。

このSetStatistics関数は統計情報を設定するためにのみ使用され、実際のデータの値には影響しません。データ自体を変更するには、RasterIO読み取りと書き込みの関数を使用できます。

ComputeRasterMinMax

仮想 CPLErr  ComputeRasterMinMax(int、double * )

バンドの最小/最大値を計算する

パラメータ:

  • bAboutOK  -- 近似 (より速い) 答えが OK の場合は TRUE、それ以外の場合は FALSE。

  • adfMinMax  -- 最小値 (adfMinMax[0]) と最大値 (adfMinMax[1]) の配列を返します。

戻り値: 成功の場合は CE_None、失敗の場合は CE_Failure

   // 获取第一个波段
    GDALRasterBand* band = dataset->GetRasterBand(1);

    // 计算波段的最小值和最大值
    int approxOK = false; // 是否允许使用近似计算
    double minMax[2];
    CPLErr err = band->ComputeRasterMinMax(approxOK, minMax);

    if (err == CE_None)
    {
        std::cout << "Minimum: " << minMax[0] << std::endl;
        std::cout << "Maximum: " << minMax[1] << std::endl;
    }
    else
    {
        std::cout << "Failed to compute raster min/max." << std::endl;
    }

GetMetadataItem

仮想 const char *GetMetadataItem(const char *pszName, const char *pszDomain = "") オーバーライド

単一のメタデータ項目を抽出する

パラメータ:

  • pszName  – 取得するメタデータ項目のキー。

  • pszDomain  – 取得するドメイン。デフォルトのドメインには NULL を使用します。

戻り値: キーが見つからない場合は NULL、成功した場合は値文字列の内部コピーへのポインタ

    // 获取数据集或波段的元数据项
    const char* pszName = "METADATANAME"; // 要获取的元数据项名称
    const char* pszDomain = ""; // 元数据项所属的域,可以为空字符串

    const char* pszValue = dataset->GetMetadataItem(pszName, pszDomain);

    if (pszValue != nullptr)
    {
        std::cout << "Metadata item " << pszName << ": " << pszValue << std::endl;
    }
    else
    {
        std::cout << "Metadata item not found." << std::endl;
    }

GetOverviewCount

virtual  int  GetOverviewCount ( )

使用可能な概要レイヤーの数を返します。

戻り値: 概要カウント、またはない場合はゼロ

    // 获取第一个波段
    GDALRasterBand* band = dataset->GetRasterBand(1);

    // 获取波段的概览数量
    int overviewCount = band->GetOverviewCount();

    std::cout << "Number of overviews: " << overviewCount << std::endl;

概要を取得

仮想 GDALRasterBand  * GetOverview (int )

ラスター バンド オブジェクトの概要を取得する

パラメータ:

i  --  0 からGetOverviewCount() -1までの概要インデックス。

戻り値:  GDALRasterBandの概要。

    // 获取第一个波段
    GDALRasterBand* band = dataset->GetRasterBand(1);

    // 获取第一个概览波段
    int overviewIndex = 0;
    GDALRasterBand* overviewBand = band->GetOverview(overviewIndex);

    if (overviewBand != nullptr)
    {
        std::cout << "Overview Band Index: " << overviewIndex << std::endl;
        std::cout << "Overview Band XSize: " << overviewBand->GetXSize() << std::endl;
        std::cout << "Overview Band YSize: " << overviewBand->GetYSize() << std::endl;
    }
    else
    {
        std::cout << "Overview Band not found." << std::endl;
    }

ヒストグラムの取得

仮想 CPLErr  GetHistogram (double dfMin、double dfMax、 int nBuckets、  GUIntBig  *panHistogram、int bIncludeOutOfRange、int bAboutOK、  GDALProgressFunc、void *pProgressData )

ラスターヒス​​トグラムを計算する

パラメータ:

  • dfMin  -- ヒストグラムの下限。

  • dfMax  – ヒストグラムの上限。

  • nBuckets  – パンヒストグラム内のバケットの数。

  • panHistogram  – ヒストグラムの総数を配置する配列。

  • bIncludeOutOfRange  -- TRUE の場合、ヒストグラム範囲未満の値は panHistogram[0] にマッピングされ、それ以上の値は panHistogram[nBuckets-1] にマッピングされます。それ以外の場合、範囲外の値は破棄されます。

  • bAboutOK  – 近似または不完全なヒストグラムが OK の場合は TRUE。

  • pfnProgress  -- 進行状況の完了を報告する関数。

  • pProgressData  -- pfnProgress に渡すアプリケーション データ。

戻り値: 成功の場合は CE_None、問題がある場合は CE_Failure

   // 获取第一个波段
    GDALRasterBand* band = dataset->GetRasterBand(1);

    // 设置直方图参数
    double dfMin, dfMax;
    int nBuckets = 256;
    GUIntBig* panHistogram = new GUIntBig[nBuckets];
    int bIncludeOutOfRange = FALSE;
    int bApproxOK = FALSE;
    GDALProgressFunc pfnProgress = GDALTermProgress;
    void* pProgressData = nullptr;

    // 获取直方图
    CPLErr err = band->GetHistogram(dfMin, dfMax, nBuckets, panHistogram,
                                    bIncludeOutOfRange, bApproxOK, pfnProgress, pProgressData);

    if (err == CE_None)
    {
        // 输出直方图结果
        std::cout << "Histogram: " << std::endl;
        for (int i = 0; i < nBuckets; ++i)
        {
            std::cout << "Bucket " << i << ": " << panHistogram[i] << std::endl;
        }
    }
    else
    {
        std::cout << "Failed to compute histogram." << std::endl;
    }

    // 释放内存
    delete[] panHistogram;

GetDefaultビートグラム

仮想 CPLErr  GetDefaultBeetogram (double *pdfMin、double *pdfMax、int *pnBuckets、 吉恩大 **ppanHistogram、int bForce、  GDALProgressFunc、void *pProgressData )

デフォルトのラスターヒス​​トグラムを取得する

パラメータ:

  • pdfMin  – ヒストグラムの下限を含む double へのポインタ。

  • pdfMax  – ヒストグラムの上限を含む double へのポインタ。

  • pnBuckets  -- *ppanHistogram 内のバケット数を含む int 値へのポインタ。

  • ppanHistogram – ヒストグラムの合計を配置する配列へのポインタ。VSIFree 経由でリリース

  • bForce  -- 計算を強制する場合は TRUE。FALSE でデフォルトのヒストグラムが使用できない場合、メソッドは CE_Warning を返します。

  • pfnProgress  -- 進行状況の完了を報告する関数。

  • pProgressData  -- pfnProgress に渡すアプリケーション データ。

戻り値: CE_None が成功した場合は CE_Failure、問題がある場合は CE_Failure、デフォルトのヒストグラムが利用できない場合は CE_Warning

SetDefaultヒストグラム

仮想 CPLErr  SetDefaultHistogram (double dfMin、double dfMax、int nBuckets、  GUIntBig  *panHistogram )

デフォルトのヒストグラムを設定する

    // 获取第一个波段
    GDALRasterBand* band = dataset->GetRasterBand(1);

    // 设置直方图参数
    double dfMin = 0.0; // 设置最小像素值
    double dfMax = 255.0; // 设置最大像素值
    int nBuckets = 256; // 设置分桶数
    GUIntBig* panHistogram = new GUIntBig[nBuckets]; // 设置直方图数据
    for (int i = 0; i < nBuckets; ++i)
    {
        panHistogram[i] = i * 100; // 设置直方图数据,这里仅为示例数据
    }

    // 设置默认直方图
    CPLErr err = band->SetDefaultHistogram(dfMin, dfMax, nBuckets, panHistogram);

    if (err == CE_None)
    {
        std::cout << "Default histogram set successfully." << std::endl;
    }
    else
    {
        std::cout << "Failed to set default histogram." << std::endl;
    }

    // 释放内存
    delete[] panHistogram;

ヒストグラム データを使用GetDefaultHistogramまたは取得し、必要に応じてバンドのデフォルト ヒストグラムとして設定するのGetHistogramが一般的なワークフローです。ただし、具体的な使用方法は、実際のニーズとデータ処理プロセスに応じて決定する必要があります。

GetDefaultRAT

仮想 GDALRasterAttributeTable * GetDefaultRAT ( )

デフォルトのラスター属性テーブルを取得する

戻り値: NULL、またはバンドが所有する内部 RAT へのポインター

ラスター属性テーブルは、ラスターデータの属性情報を格納するために使用されるテーブル構造であり、ピクセル値と属性値のマッピング関係が含まれます。各ピクセル値は、分類ラベル、カテゴリ名、統計情報などの 1 つ以上の属性値に対応できます。

    // 获取第一个波段
    GDALRasterBand* band = dataset->GetRasterBand(1);

    // 获取默认栅格属性表
    GDALRasterAttributeTable* rat = band->GetDefaultRAT();

    if (rat != nullptr)
    {
        // 输出栅格属性表信息
        std::cout << "Raster Attribute Table (RAT) Summary:" << std::endl;
        std::cout << "Row count: " << rat->GetRowCount() << std::endl;
        std::cout << "Column count: " << rat->GetColumnCount() << std::endl;

        // 输出每一行的属性信息
        for (int i = 0; i < rat->GetRowCount(); ++i)
        {
            GDALRasterAttributeTableRow* row = rat->GetRow(i);
            std::cout << "Row " << i << ": ";
            for (int j = 0; j < rat->GetColumnCount(); ++j)
            {
                std::cout << row->GetValueAsString(j) << " ";
            }
            std::cout << std::endl;
        }
    }
    else
    {
        std::cout << "No default Raster Attribute Table (RAT) found." << std::endl;
    }

SetDefaultRAT

仮想 CPLErr  SetDefaultRAT ( const  GDALRasterAttributeTable *poRAT )

デフォルトのラスター属性テーブルを設定する

パラメータ:

poRAT  -- 帯域を割り当てる RAT。

戻り値: 成功した場合は CE_None、サポートされていないか失敗した場合は CE_Failure

    // 获取第一个波段
    GDALRasterBand* band = dataset->GetRasterBand(1);

    // 创建一个栅格属性表对象并设置属性
    GDALRasterAttributeTable* rat = new GDALRasterAttributeTable();
    rat->CreateColumn("Category", GFT_Integer, GFU_MinMax);
    rat->CreateColumn("Label", GFT_String, GFU_Name);

    GDALRasterAttributeRow row;
    row.SetField(0, 1);
    row.SetField(1, "Category 1");
    rat->AddRow(&row);

    row.SetField(0, 2);
    row.SetField(1, "Category 2");
    rat->AddRow(&row);

    // 将创建的栅格属性表设置为波段的默认栅格属性表
    CPLErr err = band->SetDefaultRAT(rat);

    if (err == CE_None)
    {
        std::cout << "Default Raster Attribute Table (RAT) set successfully." << std::endl;
    }
    else
    {
        std::cout << "Failed to set default Raster Attribute Table (RAT)." << std::endl;
    }

    // 释放内存
    delete rat;

おすすめ

転載: blog.csdn.net/qq_69574549/article/details/132059659