# GDALRasterAttributeTable C++ API

## Include file

gdal_rat.h

## GDALRasterAttributeTable class

class GDALRasterAttributeTable

  The GDALRasterAttributeTable (or RAT) class is used to encapsulate a table used to provide attribute information about pixel values.

  Each row in the table applies to a range of pixel values (or a single value in some cases), and might have attributes such as the histogram count for that range, the color pixels of that range should be drawn names of classes or any other generic information.

  Raster attribute tables can be used to represent histograms, color tables, and classification information.

  Each column in a raster attribute table has a name, a type (integer, floating point, string, boolean, date time, geometries encoded as WKB), and a GDALRATFieldUsage. The usage distinguishes columns with particular understood purposes (such as color, histogram count, name) and columns that have specific purposes not understood by the library (long label, suitability_for_growing_wheat, etc).

  In the general case each row has a column indicating the minimum pixel values falling into that category, and a column indicating the maximum pixel value. These are indicated with usage values of GFU_Min, and GFU_Max. In other cases where each row is a discrete pixel value, one column of usage GFU_MinMax can be used.

  In other cases all the categories are of equal size and regularly spaced and the categorization information can be determined just by knowing the value at which the categories start, and the size of a category. This is called "Linear Binning" and the information is kept specially on the raster attribute table as a whole.

  RATs are normally associated with GDALRasterBands and can be queried using the GDALRasterBand::GetDefaultRAT() method.

  Subclassed by GDALDefaultRasterAttributeTable, GDALRasterAttributeTableFromMDArrays

  Public Functions

  virtual GDALRasterAttributeTable *Clone() const = 0

    Copy Raster Attribute Table.

    Creates a new copy of an existing raster attribute table. The new copy becomes the responsibility of the caller to destroy. May fail (return nullptr) if the attribute table is too large to clone (GetRowCount() * GetColCount() > RAT_MAX_ELEM_FOR_CLONE)

    This method is the same as the C function GDALRATClone().

    Returns:

      new copy of the RAT as an in-memory implementation.

  virtual int GetColumnCount() const = 0

    Fetch table column count.

    This method is the same as the C function GDALRATGetColumnCount().

    Returns:

      the number of columns.

  virtual const char *GetNameOfCol(int iCol) const = 0

    Fetch name of indicated column.

    This method is the same as the C function GDALRATGetNameOfCol().

    Parameters:

      iCol -- the column index (zero based).

    Returns:

      the column name or an empty string for invalid column numbers.

  virtual GDALRATFieldUsage GetUsageOfCol(int iCol) const = 0

    Fetch column usage value.

    This method is the same as the C function GDALRATGetUsageOfCol().

    Parameters:

      iCol -- the column index (zero based).

    Returns:

      the column usage, or GFU_Generic for improper column numbers.

  virtual GDALRATFieldType GetTypeOfCol(int iCol) const = 0

    Fetch column type.

    This method is the same as the C function GDALRATGetTypeOfCol().

    Parameters:

      iCol -- the column index (zero based).

    Returns:

      column type or GFT_Integer if the column index is illegal.

  virtual int GetColOfUsage(GDALRATFieldUsage eUsage) const = 0

    Fetch column index for given usage.

    Returns the index of the first column of the requested usage type, or -1 if no match is found.

    This method is the same as the C function GDALRATGetUsageOfCol().

    Parameters:

      eUsage -- usage type to search for.

    Returns:

      column index, or -1 on failure.

  virtual int GetRowCount() const = 0

    Fetch row count.

    This method is the same as the C function GDALRATGetRowCount().

    Returns:

      the number of rows.

  virtual const char *GetValueAsString(int iRow, int iField) const = 0

    Fetch field value as a string.

    The value of the requested column in the requested row is returned as a string. This method is nominally called on fields of type GFT_String, but it can be called on fields of other types as well. If the field is numeric, it is formatted as a string using default rules, so some precision may be lost.

    The returned string is temporary and cannot be expected to be available after the next GDAL call.

    This method is the same as the C function GDALRATGetValueAsString().

    Parameters:

      - iRow -- row to fetch (zero based).

      - iField -- column to fetch (zero based).

    Returns:

      field value.

  virtual int GetValueAsInt(int iRow, int iField) const = 0

    Fetch field value as a integer.

    The value of the requested column in the requested row is returned as an integer. This method is nominally called on fields of type GFT_Integer, but it can be called on fields of other types as well. Non-integer fields will be converted to integer with the possibility of data loss.

    This method is the same as the C function GDALRATGetValueAsInt().

    Parameters:

      - iRow -- row to fetch (zero based).

      - iField -- column to fetch (zero based).

    Returns:

      field value

  virtual double GetValueAsDouble(int iRow, int iField) const = 0

    Fetch field value as a double.

    The value of the requested column in the requested row is returned as a double. This method is nominally called on fields of type GFT_Real, but it can be called on fields of other types as well. Non double fields will be converted to double with the possibility of data loss.

    This method is the same as the C function GDALRATGetValueAsDouble().

    Parameters:

      - iRow -- row to fetch (zero based).

      - iField -- column to fetch (zero based).

    Returns:

      field value

  virtual bool GetValueAsBoolean(int iRow, int iField) const = 0

    Fetch field value as a boolean.

    The value of the requested column in the requested row is returned as a boolean. This method is nominally called on fields of type GFT_Boolean, but it can be called on fields of other types as well. Non boolean fields will be converted to boolean with the possibility of data loss.

    This method is the same as the C function GDALRATGetValueAsBoolean().

    Since

      3.12

    Parameters:

      - iRow -- row to fetch (zero based).

      - iField -- column to fetch (zero based).

    Returns:

      field value

  virtual GDALRATDateTime GetValueAsDateTime(int iRow, int iField) const = 0

    Fetch field value as a datetime.

    The value of the requested column in the requested row is returned as a datetime. Besides being called on a GFT_DateTime field, it is also possible to call this method on a string field that contains a ISO-8601 encoded datetime.

    This method is the same as the C function GDALRATGetValueAsDateTime().

    Since

      3.12

    Parameters:

      - iRow -- row to fetch (zero based).

      - iField -- column to fetch (zero based).

    Returns:

      field value

  virtual const GByte *GetValueAsWKBGeometry(int iRow, int iField, size_t &nWKBSize) const = 0

    Fetch field value as a WKB geometry.

    The value of the requested column in the requested row is returned as a WKB geometry. Besides being called on a GFT_WKBGeometry field, it is also possible to call this method on a string field that contains a WKT encoded geometry.

    The returned pointer may be invalidated by a following call to a method of this GDALRasterAttributeTable instance.

    This method is the same as the C function GDALRATGetValueAsWKBGeometry().

    Since

      3.12

    Parameters:

      - iRow -- row to fetch (zero based).

      - iField -- column to fetch (zero based).

      - nWKBSize -- [out] Number of bytes of the returned pointer

    Returns:

      field value, or nullptr

  virtual CPLErr SetValue(int iRow, int iField, const char *pszValue) = 0

    Set field value from string.

    The indicated field (column) on the indicated row is set from the passed value. This method is nominally called on fields of type GFT_String, but it can be called on fields of other types as well. The value will be automatically converted for other field types, with a possible loss of precision.

    This method is the same as the C function GDALRATSetValueAsString().

    Parameters:

      - iRow -- row to fetch (zero based).

      - iField -- column to fetch (zero based).

      - pszValue -- the value to assign.

    Returns:

      (since 3.12) CE_None in case of success, error code otherwise

  virtual CPLErr SetValue(int iRow, int iField, int nValue) = 0

    Set field value from integer.

    The indicated field (column) on the indicated row is set from the passed value. This method is nominally called on fields of type GFT_Integer, but it can be called on fields of other types as well. The value will be automatically converted for other field types, with a possible loss of precision.

    This method is the same as the C function GDALRATSetValueAsInteger().

    Parameters:

      - iRow -- row to fetch (zero based).

      - iField -- column to fetch (zero based).

      - nValue -- the value to assign.

    Returns:

      (since 3.12) CE_None in case of success, error code otherwise

  virtual CPLErr SetValue(int iRow, int iField, double dfValue) = 0

    Set field value from double.

    The indicated field (column) on the indicated row is set from the passed value. This method is nominally called on fields of type GFT_Real, but it can be called on fields of other types as well. The value will be automatically converted for other field types, with a possible loss of precision.

    This method is the same as the C function GDALRATSetValueAsDouble().

    Parameters:

      - iRow -- row to fetch (zero based).

      - iField -- column to fetch (zero based).

      - dfValue -- the value to assign.

    Returns:

      (since 3.12) CE_None in case of success, error code otherwise

  virtual CPLErr SetValue(int iRow, int iField, bool bValue) = 0

    Set field value from boolean.

    The indicated field (column) on the indicated row is set from the passed value. This method is nominally called on fields of type GFT_Boolean, but it can be called on fields of other types as well. The value will be automatically converted for other field types, with a possible loss of precision.

    This method is the same as the C function GDALRATSetValueAsBoolean().

    Since

      3.12

    Parameters:

      - iRow -- row to fetch (zero based).

      - iField -- column to fetch (zero based).

      - bValue -- the value to assign.

    Returns:

      CE_None in case of success, error code otherwise

  virtual CPLErr SetValue(int iRow, int iField, const GDALRATDateTime &sDateTime) = 0

    Set field value from datetime.

    The indicated field (column) on the indicated row is set from the passed value. Besides being called on a field of type GFT_DateTime, this method can also be called on a field of type GFT_String, in which case the datetime will be converted into its ISO-8601 representation.

    Note that the GDALRATDateTime::bIsValid field must be set to true if the date time is valid.

    This method is the same as the C function GDALRATSetValueAsDateTime().

    Since

      3.12

    Parameters:

      - iRow -- row to fetch (zero based).

      - iField -- column to fetch (zero based).

      - sDateTime -- Date time value

    Returns:

      CE_None in case of success, error code otherwise

  virtual CPLErr SetValue(int iRow, int iField, const void *pabyWKB, size_t nWKBSize) = 0

    Set field value from a WKB geometry.

    The indicated field (column) on the indicated row is set from the passed value. Besides being called on a field of type GFT_WKBGeometry, this method can also be called on a field of type GFT_String, in which case the datetime will be converted into its WKT geometry representation.

    This method is the same as the C function GDALRATSetValueAsWKBGeometry().

    Since

      3.12

    Parameters:

      - iRow -- row to fetch (zero based).

      - iField -- column to fetch (zero based).

      - pabyWKB -- Pointer to a WKB encoded geometry

      - nWKBSize -- Number of bytes of pabyWKB.

    Returns:

      CE_None in case of success, error code otherwise

  virtual int ChangesAreWrittenToFile() = 0

    Determine whether changes made to this RAT are reflected directly in the dataset.

    If this returns FALSE then GDALRasterBand.SetDefaultRAT() should be called. Otherwise this is unnecessary since changes to this object are reflected in the dataset.

    This method is the same as the C function GDALRATChangesAreWrittenToFile().

  virtual CPLErr SetTableType(const GDALRATTableType eInTableType) = 0

    Set the RAT table type.

    Set whether the RAT is thematic or athematic (continuous).

  virtual GDALRATTableType GetTableType() const = 0

    Get the RAT table type.

    Indicates whether the RAT is thematic or athematic (continuous).

    Returns:

      table type

  virtual CPLErr ValuesIO(GDALRWFlag eRWFlag, int iField, int iStartRow, int iLength, double *pdfData)

    Read or Write a block of doubles to/from the Attribute Table.

    This method is the same as the C function GDALRATValuesIOAsDouble().

    Parameters:

      - eRWFlag -- either GF_Read or GF_Write

      - iField -- column of the Attribute Table

      - iStartRow -- start row to start reading/writing (zero based)

      - iLength -- number of rows to read or write

      - pdfData -- pointer to array of doubles to read/write. Should be at least iLength long.

    Returns:

      CE_None or CE_Failure if iStartRow + iLength greater than number of rows in table.

  virtual CPLErr ValuesIO(GDALRWFlag eRWFlag, int iField, int iStartRow, int iLength, int *pnData)

    Read or Write a block of integers to/from the Attribute Table.

    This method is the same as the C function GDALRATValuesIOAsInteger().

    Parameters:

      - eRWFlag -- either GF_Read or GF_Write

      - iField -- column of the Attribute Table

      - iStartRow -- start row to start reading/writing (zero based)

      - iLength -- number of rows to read or write

      - pnData -- pointer to array of ints to read/write. Should be at least iLength long.

    Returns:

      CE_None or CE_Failure if iStartRow + iLength greater than number of rows in table.

  virtual CPLErr ValuesIO(GDALRWFlag eRWFlag, int iField, int iStartRow, int iLength, char **papszStrList)

    Read or Write a block of strings to/from the Attribute Table.

    This method is the same as the C function GDALRATValuesIOAsString(). When reading, papszStrList must be already allocated to the correct size. The caller is expected to call CPLFree on each read string.

    Parameters:

      - eRWFlag -- either GF_Read or GF_Write

      - iField -- column of the Attribute Table

      - iStartRow -- start row to start reading/writing (zero based)

      - iLength -- number of rows to read or write

      - papszStrList -- pointer to array of strings to read/write. Should be at least iLength long.

    Returns:

      CE_None or CE_Failure if iStartRow + iLength greater than number of rows in table.

  virtual CPLErr ValuesIO(GDALRWFlag eRWFlag, int iField, int iStartRow, int iLength, bool *pbData)

    Read or Write a block of booleans to/from the Attribute Table.

    This method is the same as the C function GDALRATValuesIOAsBoolean().

    Since

      3.12

    Parameters:

      - eRWFlag -- either GF_Read or GF_Write

      - iField -- column of the Attribute Table

      - iStartRow -- start row to start reading/writing (zero based)

      - iLength -- number of rows to read or write

      - pbData -- pointer to array of booleans to read/write. Should be at least iLength long.

    Returns:

      CE_None or CE_Failure if iStartRow + iLength greater than number of rows in table.

  virtual CPLErr ValuesIO(GDALRWFlag eRWFlag, int iField, int iStartRow, int iLength, GDALRATDateTime *pasDateTime)

    Read or Write a block of DateTime to/from the Attribute Table.

    This method is the same as the C function GDALRATValuesIOAsDateTime().

    Since

      3.12

    Parameters:

      - eRWFlag -- either GF_Read or GF_Write

      - iField -- column of the Attribute Table

      - iStartRow -- start row to start reading/writing (zero based)

      - iLength -- number of rows to read or write

      - psDateTime -- pointer to array of DateTime to read/write. Should be at least iLength long.

    Returns:

      CE_None or CE_Failure if iStartRow + iLength greater than number of rows in table.

  virtual CPLErr ValuesIO(GDALRWFlag eRWFlag, int iField, int iStartRow, int iLength, GByte **ppabyWKB, size_t *pnWKBSize)

    Read or Write a block of WKB-encoded geometries to/from the Attribute Table.

    When reading, each ppabyWKB[] should be CPLFree'd() after use.

    This method is the same as the C function GDALRATValuesIOAsWKBGeometry().

    Since

      3.12

    Parameters:

      - eRWFlag -- either GF_Read or GF_Write

      - iField -- column of the Attribute Table

      - iStartRow -- start row to start reading/writing (zero based)

      - iLength -- number of rows to read or write

      - ppabyWKB -- pointer to array of pointer of WKB-encoded geometries to read/write. Should be at least iLength long.

      - pnWKBSize -- pointer to array of WKB size. Should be at least iLength long.

    Returns:

      CE_None or CE_Failure if iStartRow + iLength greater than number of rows in table.

  virtual void SetRowCount(int iCount)

    Set row count.

    Resizes the table to include the indicated number of rows. Newly created rows will be initialized to their default values - "" for strings, and zero for numeric fields.

    This method is the same as the C function GDALRATSetRowCount().

    Parameters:

      nNewCount -- the new number of rows.

  virtual int GetRowOfValue(double dfValue) const

    Get row for pixel value.

    Given a raw pixel value, the raster attribute table is scanned to determine which row in the table applies to the pixel value. The row index is returned.

    This method is the same as the C function GDALRATGetRowOfValue().

    Parameters:

      dfValue -- the pixel value.

    Returns:

      the row index or -1 if no row is appropriate.

  virtual int GetRowOfValue(int nValue) const

    Get row for pixel value.

    Given a raw pixel value, the raster attribute table is scanned to determine which row in the table applies to the pixel value. The row index is returned.

    Int arg for now just converted to double. Perhaps we will handle this in a special way some day?

    This method is the same as the C function GDALRATGetRowOfValue().

    Parameters:

      nValue -- the pixel value.

    Returns:

      the row index or -1 if no row is appropriate.

  virtual CPLErr CreateColumn(const char *pszFieldName, GDALRATFieldType eFieldType, GDALRATFieldUsage eFieldUsage)

    If the table already has rows, all row values for the new column will be initialized to the default value ("", or zero).

    The new column is always created as the last column, and will be column (field) "GetColumnCount()-1" after CreateColumn() has completed successfully.

    This method is the same as the C function GDALRATCreateColumn().

    Parameters:

      - pszFieldName -- the name of the field to create.

      - eFieldType -- the field type (integer, double or string).

      - eFieldUsage -- the field usage, GFU_Generic if not known.

    Returns:

      CE_None on success or CE_Failure if something goes wrong.

  virtual CPLErr SetLinearBinning(double dfRow0Min, double dfBinSize)

    Set linear binning information.

    For RATs with equal sized categories (in pixel value space) that are evenly spaced, this method may be used to associate the linear binning information with the table.

    This method is the same as the C function GDALRATSetLinearBinning().

    Parameters:

      - dfRow0MinIn -- the lower bound (pixel value) of the first category.

      - dfBinSizeIn -- the width of each category (in pixel value units).

    Returns:

      CE_None on success or CE_Failure on failure.

  virtual int GetLinearBinning(double *pdfRow0Min, double *pdfBinSize) const

    Get linear binning information.

    Returns linear binning information if any is associated with the RAT.

    This method is the same as the C function GDALRATGetLinearBinning().

    Parameters:

      - pdfRow0Min -- (out) the lower bound (pixel value) of the first category.

      - pdfBinSize -- (out) the width of each category (in pixel value units).

    Returns:

      TRUE if linear binning information exists or FALSE if there is none.

  virtual CPLXMLNode *Serialize() const

    Serialize.

    Serialize as a XML tree.

    May fail (return nullptr) if the attribute table is too large to serialize (GetRowCount() * GetColCount() > RAT_MAX_ELEM_FOR_CLONE)

    Returns:

      XML tree.

  virtual void *SerializeJSON() const

    Serialize as a JSON object.

    Returns:

      JSON object (of type json_object*)

  virtual CPLErr XMLInit(const CPLXMLNode*, const char*)

    Deserialize from XML.

    Parameters:

      psTree -- XML tree

    Returns:

      error code.

  virtual CPLErr InitializeFromColorTable(const GDALColorTable*)

    Initialize from color table.

    This method will setup a whole raster attribute table based on the contents of the passed color table. The Value (GFU_MinMax), Red (GFU_Red), Green (GFU_Green), Blue (GFU_Blue), and Alpha (GFU_Alpha) fields are created, and a row is set for each entry in the color table.

    The raster attribute table must be empty before calling InitializeFromColorTable().

    The Value fields are set based on the implicit assumption with color tables that entry 0 applies to pixel value 0, 1 to 1, etc.

    This method is the same as the C function GDALRATInitializeFromColorTable().

    Parameters:

      poTable -- the color table to copy from.

    Returns:

      CE_None on success or CE_Failure if something goes wrong.

  virtual GDALColorTable *TranslateToColorTable(int nEntryCount = -1)

    Translate to a color table.

    This method will attempt to create a corresponding GDALColorTable from this raster attribute table.

    This method is the same as the C function GDALRATTranslateToColorTable().

    Parameters:

      nEntryCount -- The number of entries to produce (0 to nEntryCount-1), or -1 to auto-determine the number of entries.

    Returns:

      the generated color table or NULL on failure.

  virtual void DumpReadable(FILE* = nullptr)

    Dump RAT in readable form.

    Currently the readable form is the XML encoding ... only barely readable.

    This method is the same as the C function GDALRATDumpReadable().

    Parameters:

      fp -- file to dump to or NULL for stdout.

  virtual void RemoveStatistics() = 0

    Remove statistics from the RAT.

  Public Static Functions

  static inline GDALRasterAttributeTableH ToHandle(GDALRasterAttributeTable *poRAT)

    Convert a GDALRasterAttributeTable* to a GDALRasterAttributeTableH.

  static inline GDALRasterAttributeTable *FromHandle(GDALRasterAttributeTableH hRAT)

    Convert a GDALRasterAttributeTableH to a GDALRasterAttributeTable*.

## GDALDefaultRasterAttributeTable class

class GDALDefaultRasterAttributeTable : public GDALRasterAttributeTable

  Raster Attribute Table container.

  Public Functions

  GDALDefaultRasterAttributeTable()

    Construct empty table.

  virtual GDALDefaultRasterAttributeTable *Clone() const override

    Copy Raster Attribute Table.

    Creates a new copy of an existing raster attribute table. The new copy becomes the responsibility of the caller to destroy. May fail (return nullptr) if the attribute table is too large to clone (GetRowCount() * GetColCount() > RAT_MAX_ELEM_FOR_CLONE)

    This method is the same as the C function GDALRATClone().

    Returns:

      new copy of the RAT as an in-memory implementation.

  virtual int GetColumnCount() const override

    Fetch table column count.

    This method is the same as the C function GDALRATGetColumnCount().

    Returns:

      the number of columns.

  virtual const char *GetNameOfCol(int) const override

    Fetch name of indicated column.

    Parameters:

      iCol -- column index.

    Returns:

      name.

  virtual GDALRATFieldUsage GetUsageOfCol(int) const override

    Fetch column usage value.

    Parameters:

      iCol -- column index.

    Returns:

      usage.

  virtual GDALRATFieldType GetTypeOfCol(int) const override

    Fetch column type.

    Parameters:

      iCol -- column index.

    Returns:

      type.

  virtual int GetColOfUsage(GDALRATFieldUsage) const override

    Return the index of the column that corresponds to the passed usage.

    Parameters:

      eUsage -- usage.

    Returns:

      column index, or -1 in case of error.

  virtual int GetRowCount() const override

    Fetch row count.

    This method is the same as the C function GDALRATGetRowCount().

    Returns:

      the number of rows.

  virtual const char *GetValueAsString(int iRow, int iField) const override

    Fetch field value as a string.

    The value of the requested column in the requested row is returned as a string. This method is nominally called on fields of type GFT_String, but it can be called on fields of other types as well. If the field is numeric, it is formatted as a string using default rules, so some precision may be lost.

    The returned string is temporary and cannot be expected to be available after the next GDAL call.

    This method is the same as the C function GDALRATGetValueAsString().

    Parameters:

      - iRow -- row to fetch (zero based).

      - iField -- column to fetch (zero based).

    Returns:

      field value.

  virtual int GetValueAsInt(int iRow, int iField) const override

    Fetch field value as a integer.

    The value of the requested column in the requested row is returned as an integer. This method is nominally called on fields of type GFT_Integer, but it can be called on fields of other types as well. Non-integer fields will be converted to integer with the possibility of data loss.

    This method is the same as the C function GDALRATGetValueAsInt().

    Parameters:

      - iRow -- row to fetch (zero based).

      - iField -- column to fetch (zero based).

    Returns:

      field value

  virtual double GetValueAsDouble(int iRow, int iField) const override

    Fetch field value as a double.

    The value of the requested column in the requested row is returned as a double. This method is nominally called on fields of type GFT_Real, but it can be called on fields of other types as well. Non double fields will be converted to double with the possibility of data loss.

    This method is the same as the C function GDALRATGetValueAsDouble().

    Parameters:

      - iRow -- row to fetch (zero based).

      - iField -- column to fetch (zero based).

    Returns:

      field value

  virtual bool GetValueAsBoolean(int iRow, int iField) const override

    Fetch field value as a boolean.

    The value of the requested column in the requested row is returned as a boolean. This method is nominally called on fields of type GFT_Boolean, but it can be called on fields of other types as well. Non boolean fields will be converted to boolean with the possibility of data loss.

    This method is the same as the C function GDALRATGetValueAsBoolean().

    Since

      3.12

    Parameters:

      - iRow -- row to fetch (zero based).

      - iField -- column to fetch (zero based).

    Returns:

      field value

  virtual GDALRATDateTime GetValueAsDateTime(int iRow, int iField) const override

    Fetch field value as a datetime.

    The value of the requested column in the requested row is returned as a datetime. Besides being called on a GFT_DateTime field, it is also possible to call this method on a string field that contains a ISO-8601 encoded datetime.

    This method is the same as the C function GDALRATGetValueAsDateTime().

    Since

      3.12

    Parameters:

      - iRow -- row to fetch (zero based).

      - iField -- column to fetch (zero based).

    Returns:

      field value

  virtual const GByte *GetValueAsWKBGeometry(int iRow, int iField, size_t &nWKBSize) const override

    Fetch field value as a WKB geometry.

    The value of the requested column in the requested row is returned as a WKB geometry. Besides being called on a GFT_WKBGeometry field, it is also possible to call this method on a string field that contains a WKT encoded geometry.

    The returned pointer may be invalidated by a following call to a method of this GDALRasterAttributeTable instance.

    This method is the same as the C function GDALRATGetValueAsWKBGeometry().

    Since

      3.12

    Parameters:

      - iRow -- row to fetch (zero based).

      - iField -- column to fetch (zero based).

      - nWKBSize -- [out] Number of bytes of the returned pointer

    Returns:

      field value, or nullptr

  virtual CPLErr SetValue(int iRow, int iField, const char *pszValue) override

    Set value.

    Parameters:

      - iRow -- row index.

      - iField -- field index.

      - pszValue -- value.

  virtual CPLErr SetValue(int iRow, int iField, double dfValue) override

    Set field value from double.

    The indicated field (column) on the indicated row is set from the passed value. This method is nominally called on fields of type GFT_Real, but it can be called on fields of other types as well. The value will be automatically converted for other field types, with a possible loss of precision.

    This method is the same as the C function GDALRATSetValueAsDouble().

    Parameters:

      - iRow -- row to fetch (zero based).

      - iField -- column to fetch (zero based).

      - dfValue -- the value to assign.

    Returns:

      (since 3.12) CE_None in case of success, error code otherwise

  virtual CPLErr SetValue(int iRow, int iField, int nValue) override

    Set field value from integer.

    The indicated field (column) on the indicated row is set from the passed value. This method is nominally called on fields of type GFT_Integer, but it can be called on fields of other types as well. The value will be automatically converted for other field types, with a possible loss of precision.

    This method is the same as the C function GDALRATSetValueAsInteger().

    Parameters:

      - iRow -- row to fetch (zero based).

      - iField -- column to fetch (zero based).

      - nValue -- the value to assign.

    Returns:

      (since 3.12) CE_None in case of success, error code otherwise

  virtual CPLErr SetValue(int iRow, int iField, bool bValue) override

    Set field value from boolean.

    The indicated field (column) on the indicated row is set from the passed value. This method is nominally called on fields of type GFT_Boolean, but it can be called on fields of other types as well. The value will be automatically converted for other field types, with a possible loss of precision.

    This method is the same as the C function GDALRATSetValueAsBoolean().

    Since

      3.12

    Parameters:

      - iRow -- row to fetch (zero based).

      - iField -- column to fetch (zero based).

      - bValue -- the value to assign.

    Returns:

      CE_None in case of success, error code otherwise

  virtual CPLErr SetValue(int iRow, int iField, const GDALRATDateTime &sDateTime) override

    Set field value from datetime.

    The indicated field (column) on the indicated row is set from the passed value. Besides being called on a field of type GFT_DateTime, this method can also be called on a field of type GFT_String, in which case the datetime will be converted into its ISO-8601 representation.

    Note that the GDALRATDateTime::bIsValid field must be set to true if the date time is valid.

    This method is the same as the C function GDALRATSetValueAsDateTime().

    Since

      3.12

    Parameters:

      - iRow -- row to fetch (zero based).

      - iField -- column to fetch (zero based).

      - sDateTime -- Date time value

    Returns:

      CE_None in case of success, error code otherwise

  virtual CPLErr SetValue(int iRow, int iField, const void *pabyWKB, size_t nWKBSize) override

    Set field value from a WKB geometry.

    The indicated field (column) on the indicated row is set from the passed value. Besides being called on a field of type GFT_WKBGeometry, this method can also be called on a field of type GFT_String, in which case the datetime will be converted into its WKT geometry representation.

    This method is the same as the C function GDALRATSetValueAsWKBGeometry().

    Since

      3.12

    Parameters:

      - iRow -- row to fetch (zero based).

      - iField -- column to fetch (zero based).

      - pabyWKB -- Pointer to a WKB encoded geometry

      - nWKBSize -- Number of bytes of pabyWKB.

    Returns:

      CE_None in case of success, error code otherwise

  virtual int ChangesAreWrittenToFile() override

    Determine whether changes made to this RAT are reflected directly in the dataset.

    If this returns FALSE then GDALRasterBand.SetDefaultRAT() should be called. Otherwise this is unnecessary since changes to this object are reflected in the dataset.

    This method is the same as the C function GDALRATChangesAreWrittenToFile().

  virtual void SetRowCount(int iCount) override

    Set row count.

    Parameters:

      nNewCount -- new count.

  virtual int GetRowOfValue(double dfValue) const override

    Get row for pixel value.

    Given a raw pixel value, the raster attribute table is scanned to determine which row in the table applies to the pixel value. The row index is returned.

    This method is the same as the C function GDALRATGetRowOfValue().

    Parameters:

      dfValue -- the pixel value.

    Returns:

      the row index or -1 if no row is appropriate.

  virtual int GetRowOfValue(int nValue) const override

    Get row for pixel value.

    Given a raw pixel value, the raster attribute table is scanned to determine which row in the table applies to the pixel value. The row index is returned.

    Int arg for now just converted to double. Perhaps we will handle this in a special way some day?

    This method is the same as the C function GDALRATGetRowOfValue().

    Parameters:

      nValue -- the pixel value.

    Returns:

      the row index or -1 if no row is appropriate.

  virtual CPLErr CreateColumn(const char *pszFieldName, GDALRATFieldType eFieldType, GDALRATFieldUsage eFieldUsage) override

    If the table already has rows, all row values for the new column will be initialized to the default value ("", or zero).

    The new column is always created as the last column, and will be column (field) "GetColumnCount()-1" after CreateColumn() has completed successfully.

    This method is the same as the C function GDALRATCreateColumn().

    Parameters:

      - pszFieldName -- the name of the field to create.

      - eFieldType -- the field type (integer, double or string).

      - eFieldUsage -- the field usage, GFU_Generic if not known.

    Returns:

      CE_None on success or CE_Failure if something goes wrong.

  virtual CPLErr SetLinearBinning(double dfRow0Min, double dfBinSize) override

    Set linear binning information.

    For RATs with equal sized categories (in pixel value space) that are evenly spaced, this method may be used to associate the linear binning information with the table.

    This method is the same as the C function GDALRATSetLinearBinning().

    Parameters:

      - dfRow0MinIn -- the lower bound (pixel value) of the first category.

      - dfBinSizeIn -- the width of each category (in pixel value units).

    Returns:

      CE_None on success or CE_Failure on failure.

  virtual int GetLinearBinning(double *pdfRow0Min, double *pdfBinSize) const override

    Get linear binning information.

    Returns linear binning information if any is associated with the RAT.

    This method is the same as the C function GDALRATGetLinearBinning().

    Parameters:

      - pdfRow0Min -- (out) the lower bound (pixel value) of the first category.

      - pdfBinSize -- (out) the width of each category (in pixel value units).

    Returns:

      TRUE if linear binning information exists or FALSE if there is none.

  virtual CPLErr SetTableType(const GDALRATTableType eInTableType) override

    Set RAT Table Type.

    Set whether table type is thematic or athematic

    This method is the same as the C function GDALRATSetTableType().

    Parameters:

      eInTableType -- the new RAT table type (GRTT_THEMATIC or GRTT_ATHEMATIC)

    Returns:

      CE_None on success or CE_Failure on failure.

  virtual GDALRATTableType GetTableType() const override

    Get RAT Table Type.

    Returns whether table type is thematic or athematic

    This method is the same as the C function GDALRATGetTableType().

    Returns:

      GRTT_THEMATIC or GRTT_ATHEMATIC

  virtual void RemoveStatistics() override

    Remove Statistics from RAT.

    Remove statistics (such as histogram) from the RAT. This is important if these have been invalidated, for example by cropping the image.

    This method is the same as the C function GDALRATRemoveStatistics().