Parcours d'apprentissage de l'API GDAL C++ (3) Auto-apprentissage de la traduction d'exemples de code GDALRasterBand

Classe GDALRasterBand <gdal_priv.h>

GDALRasterBand est une classe utilisée dans GDAL pour représenter une bande dans un jeu de données raster. Un jeu de données raster se compose généralement de plusieurs canaux, et chaque canal contient des informations de données spécifiques, telles que l'élévation, le rouge, le vert, le bleu, etc.

Utilisé pour représenter différentes caractéristiques d'une image. Un certain nombre de fonctions sont fournies pour accéder et manipuler les données de pixel d'une bande et les informations associées. C'est l'une des classes de base pour le traitement des données raster dans l'API GDAL C++, qui fournit des fonctions puissantes et une flexibilité pour le traitement et l'analyse des données raster.
 

Fonctions publiques

Remplir

 Remplissage CPLErr  virtuel(double dfRealValue, double dfImaginaryValue = 0 )

remplir cette bande avec des valeurs constantes

paramètre:

  • dfRealValue  -- le composant réel de la valeur de remplissage

  • dfImaginaryValue  -- la partie imaginaire de la valeur de remplissage, par défaut à zéro

Renvoie : CE_Failure si l'écriture a échoué, sinon CE_None

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

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

SetNoDataValue

 CPLErr  virtuel SetNoDataValue(double dfNoData )

Ne définir aucune valeur de données pour cette bande

paramètre:

dfNoData  -- la valeur à définir.

Renvoie : CE_None en cas de réussite ou CE_Failure en cas d'échec. Renvoie CE_Failure sans émettre de message d'erreur si le pilote ne le prend pas en charge

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

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

SetNoDataValueAsInt64

 CPLErr  virtuel SetNoDataValueAsInt64(int64_t nNoData )

Définit la valeur sans données pour cette bande.

Cette méthode ne doit être appelée que sur des rasters de type de données GDT_Int64

SetNoDataValueAsUInt64

 CPLErr  virtuel SetNoDataValueAsUInt64(uint64_t nNoData )

Définit la valeur sans données pour cette bande.

Cette méthode ne doit être appelée que sur des rasters de type de données GDT_UInt64

DeleteNoDataValue

 CPLErr  virtuel DeleteNoDataValue ( )

Supprimer aucune valeur de données pour cette bande

Renvoie : CE_None en cas de réussite ou CE_Failure en cas d'échec. Renvoie CE_Failure sans émettre de message d'erreur si le pilote ne le prend pas en charge

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

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

SetColorTable

 CPLErr  virtuel SetColorTable(GDALColorTable *poCT )

Définir la palette de couleurs raster

paramètre:

poCT  – La palette de couleurs à appliquer. Cela peut être NULL pour effacer la table des couleurs (si pris en charge).

Renvoie : CE_None en cas de réussite ou CE_Failure en cas d'échec. Si le pilote ne prend pas en charge l'opération, la valeur CE_Failure est renvoyée, mais aucune erreur n'est émise

    // 获取第一个波段
    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  virtuel SetColorInterpretGDALColorInterp  eColorInterp  )

Définit l'interprétation des couleurs pour la bande

paramètre:

eColorInterp  -- nouvel interpréteur de couleurs pour ce groupe.

Renvoie : CE_None en cas de succès ou CE_Failure si le format ne prend pas en charge la méthode

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

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

DécalageDéfinir

 CPLErr  SetOffset virtuel(double dfNewOffset )

définir le décalage du zoom

paramètre:

dfNewOffset  -- nouveau décalage.

Renvoie : CE_None ou CE_Failure en cas de succès ou d'échec

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

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

Définir l'échelle

 CPLErr  SetScale virtuel(double dfNewScale )

définir le taux de zoom

paramètre:

dfNewScale  -- la nouvelle échelle.

Renvoie : CE_None ou CE_Failure en cas de succès ou d'échec

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

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

Définir le type d'unité

 CPLErr  virtuel SetUnitType( char const  *pszNewValue )

Définir le type d'unité Définit le type d'unité pour la bande raster. La valeur doit être l'une des "" (par défaut signifie inconnu), "m" pour les mètres ou "ft" pour les pieds, mais d'autres valeurs non standard sont autorisées

paramètre:

pszNewValue  -- la nouvelle valeur du type d'unité.

Renvoie : CE_None en cas de succès ou CE_Failure en cas d'échec ou non pris en charge

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

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

Obtenir des statistiques

 CPLErr  virtuel GetStatistics(int bApproxOK, int bForce, double *pdfMin, double *pdfMax, double *pdfMean, double *padfStdDev )

Obtenir des statistiques d'images

Renvoie le minimum, le maximum, la moyenne et l'écart type de toutes les valeurs de pixel de cette bande. L'indicateur bApproxOK peut être défini sur vrai si les statistiques approximatives sont suffisantes, auquel cas les statistiques peuvent être calculées à l'aide d'un sous-ensemble de vignettes d'aperçu ou d'image

paramètre:

  • bApproxOK  – TRUE si les statistiques peuvent être calculées à partir d'aperçus ou de sous-ensembles de toutes les tranches.

  • bForce  -- si les statistiques FALSE sont uniquement renvoyées sans renumériser l'image. Si VRAI, force les calculs statistiques lorsque les valeurs préexistantes ne peuvent pas être obtenues rapidement.

  • pdfMin  - La position minimale dans laquelle charger l'image (peut être NULL).

  • pdfMax  - où charger la valeur maximale de l'image (peut être NULL).

  • pdfMean  - où charger la moyenne de l'image (peut être NULL).

  • pdfStdDev  - où charger l'écart type de l'image (peut être NULL).

Renvoie : CE_None en cas de succès, CE_Warning si aucune valeur n'est renvoyée, CE_Failure en cas d'erreur

    // 获取第一个波段
    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;
    }

CalculStatistiques

 CPLErr  virtuel ComputeStatistics(int bApproxOK, double *pdfMin, double *pdfMax, double *pdfMean, double *pdfStdDev,  GDALProgressFunc, void *pProgressData )

Calcul des statistiques d'images

Renvoie le minimum, le maximum, la moyenne et l'écart type de toutes les valeurs de pixel de cette bande. L'indicateur bApproxOK peut être défini sur vrai si les statistiques approximatives sont suffisantes, auquel cas les statistiques peuvent être calculées à l'aide d'un sous-ensemble de vignettes d'aperçu ou d'image

paramètre:

  • bApproxOK  – TRUE si les statistiques peuvent être calculées à partir d'aperçus ou de sous-ensembles de toutes les tranches.

  • pdfMin  - La position minimale dans laquelle charger l'image (peut être NULL).

  • pdfMax  - où charger la valeur maximale de l'image (peut être NULL).

  • pdfMean  - où charger la moyenne de l'image (peut être NULL).

  • pdfStdDev  - où charger l'écart type de l'image (peut être NULL).

  • pfnProgress  -- fonction à appeler pour signaler la progression ou NULL.

  • pProgressData  -- Données d'application à transmettre à la fonction de progression.

Renvoie : CE_None en cas de succès, CE_Failure si une erreur s'est produite ou si l'utilisateur a terminé le traitement

    // 获取第一个波段
    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;
    }

SetStatistics

 CPLErr  virtuel SetStatistics(double dfMin, double dfMax, double dfMean, double dfStdDev )

Définir les statistiques de bande Cette méthode peut être utilisée pour stocker les statistiques min/max/moyenne/écart type sur les bandes raster

paramètre:

  • dfMin  -- valeur de pixel minimale.

  • dfMax  -- valeur de pixel maximale.

  • dfMean  – moyenne (moyenne) de toutes les valeurs de pixel.

  • dfStdDev  -- Écart type de toutes les valeurs de pixel.

Renvoie : CE_None en cas de succès ou CE_Failure en cas d'échec

    // 获取第一个波段
    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);

SetStatisticsLa fonction permet à l'utilisateur de définir manuellement les statistiques de la bande, y compris le minimum, le maximum, la moyenne et l'écart type, etc. Bien que les statistiques soient généralement calculées à partir des données de bande, les utilisateurs peuvent parfois souhaiter spécifier leurs propres statistiques pour un meilleur contrôle de la plage de données lors de la visualisation ou du traitement des données.

Les statistiques définies par l'utilisateur peuvent entraîner des incohérences avec les statistiques calculées à partir des données. Cela peut avoir un impact sur l'affichage et le traitement des données. Par conséquent, lors de la définition manuelle des statistiques, vous devez vous assurer que les valeurs que vous définissez correspondent à la distribution des données réelles.

Afin d'éviter les incohérences, il est recommandé de prétraiter et d'analyser les données avant de définir manuellement les statistiques afin de s'assurer que les valeurs définies sont raisonnables et conformes à la situation réelle.

Il convient de noter que SetStatisticsla fonction n'est utilisée que pour définir les informations statistiques et n'affectera pas la valeur des données réelles. Pour modifier les données elles-mêmes, vous pouvez utiliser RasterIOles fonctions de lecture et d'écriture

ComputeRasterMinMax

 CPLErr  virtuel ComputeRasterMinMax(int, double * )

Calculer les valeurs min/max pour les bandes

paramètre:

  • bApproxOK  -- TRUE si la réponse approximative (plus rapide) est OK, FALSE sinon.

  • adfMinMax  -- Renvoie un tableau de valeurs minimales (adfMinMax[0]) et maximales (adfMinMax[1]).

Renvoie : CE_None en cas de succès ou CE_Failure en cas d'échec

   // 获取第一个波段
    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

virtual const char *GetMetadataItem(const char *pszName, const char *pszDomain = "") remplacer

Extraire un seul élément de métadonnées

paramètre:

  • pszName  - la clé de l'élément de métadonnées à récupérer.

  • pszDomain  - le domaine à obtenir, utilisez NULL pour le domaine par défaut.

Renvoie : NULL si la clé est introuvable, pointeur vers la copie interne de la chaîne de valeur en cas de succès

    // 获取数据集或波段的元数据项
    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

 entier  virtuel GetOverviewCount ( )

Renvoie le nombre de couches d'aperçu disponibles

Renvoie : le nombre d'aperçus, ou zéro s'il n'y en a pas

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

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

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

ObtenirAperçu

 GDALRasterBand virtuel  * GetOverview(int )

Obtenir un aperçu de l'objet de bande raster

paramètre:

i  --  L'index de vue d'ensemble entre 0 et GetOverviewCount() -1.

Renvoie : Présentation de  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;
    }

ObtenirHistogramme

 CPLErr  virtuel GetHistogram(double dfMin, double dfMax, int nBuckets,  GUIntBig  *panHistogram, int bIncludeOutOfRange, int bApproxOK,  GDALProgressFunc, void *pProgressData )

Calculer un histogramme raster

paramètre:

  • dfMin  -- la limite inférieure de l'histogramme.

  • dfMax  – limite supérieure de l'histogramme.

  • nBuckets  – le nombre de compartiments dans le panHistogram.

  • panHistogram  - Tableau pour placer le nombre total d'histogrammes.

  • bIncludeOutOfRange  -- Si TRUE les valeurs inférieures à la plage de l'histogramme seront mappées à panHistogram[0] et au-dessus seront mappées à panHistogram[nBuckets-1], sinon les valeurs hors plage seront ignorées.

  • bApproxOK  – TRUE si l'histogramme approximatif ou incomplet est OK.

  • pfnProgress  -- Fonction pour signaler l'achèvement de la progression.

  • pProgressData  -- Données d'application à transmettre à pfnProgress.

Renvoie : CE_None en cas de succès ou CE_Failure en cas d'erreur

   // 获取第一个波段
    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;

GetDefaultBeetogram

 CPLErr  virtuel GetDefaultBeetogram(double *pdfMin, double *pdfMax, int *pnBuckets, 吉恩大 **ppanHistogram, int bForce,  GDALProgressFunc, void *pProgressData )

Obtenir l'histogramme raster par défaut

paramètre:

  • pdfMin  - Pointeur vers un double contenant la limite inférieure de l'histogramme.

  • pdfMax  – Pointeur vers un double contenant la limite supérieure de l'histogramme.

  • pnBuckets  -- Pointeur vers la valeur int qui contiendra le nombre de compartiments dans *ppanHistogram.

  • ppanHistogram – Pointeur vers un tableau pour placer les totaux de l'histogramme. Publié via VSIFree

  • bForce  -- TRUE pour forcer les calculs. Si FALSE et qu'aucun histogramme par défaut n'est disponible, la méthode renverra CE_Warning

  • pfnProgress  -- Fonction pour signaler l'achèvement de la progression.

  • pProgressData  -- Données d'application à transmettre à pfnProgress.

Renvoie : lorsque CE_None réussit, CE_Failure s'il y a un problème, si aucun histogramme par défaut n'est disponible, alors CE_Warning

SetDefaultHistogramSetDefaultHistogram

 CPLErr  virtuel SetDefaultHistogram (double dfMin, double dfMax, int nBuckets,  GUIntBig  *panHistogram )

Définir l'histogramme par défaut

    // 获取第一个波段
    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;

Il s'agit d'un flux de travail courant pour utiliser GetDefaultHistogramou obtenir les données d'histogramme, puis définir comme histogramme par défaut pour la bande si vous le souhaitez. GetHistogramCependant, la méthode d'utilisation spécifique doit être déterminée en fonction des besoins réels et du processus de traitement des données.

GetDefaultRAT

virtuel  GDALRasterAttributeTable * GetDefaultRAT ( )

Obtenir la table attributaire raster par défaut

Renvoie : NULL, ou un pointeur vers un RAT interne appartenant à la bande

La table attributaire raster est une structure de table utilisée pour stocker les informations d'attribut des données raster, qui inclut la relation de mappage entre les valeurs de pixel et les valeurs d'attribut. Chaque valeur de pixel peut correspondre à une ou plusieurs valeurs d'attribut, qui peuvent être des étiquettes de classification, des noms de catégorie, des informations statistiques, etc.

    // 获取第一个波段
    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  virtuel SetDefaultRATconst  GDALRasterAttributeTable *poRAT )

Définir la table attributaire raster par défaut

paramètre:

poRAT  -- Le RAT auquel assigner la bande.

Renvoie : CE_None en cas de succès ou CE_Failure si non pris en charge ou échec

    // 获取第一个波段
    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;

Je suppose que tu aimes

Origine blog.csdn.net/qq_69574549/article/details/132059659
conseillé
Classement