## @ignore Geo::GDALc

## @class Geo::GDAL

## @ignore TIEHASH
## @ignore CLEAR
## @ignore FIRSTKEY
## @ignore NEXTKEY
## @ignore FETCH
## @ignore STORE
## @ignore this
## @ignore UseExceptions
## @ignore PushErrorHandler
## @ignore PopErrorHandler
## @ignore Debug
## @ignore Error
## @ignore ErrorReset
## @ignore GetLastErrorNo
## @ignore GetLastErrorType
## @ignore GetLastErrorMsg
## @ignore ReadDir

## @fn $VersionInfo($request = 'VERSION_NUM')
# @param request A string specifying the request. Currently either
# "VERSION_NUM", "RELEASE_DATE", "RELEASE_NAME", or
# "--version". Default is "VERSION_NUM".
# @return Requested information.

## @fn PushFinderLocation($path)
# Add a path to the set of paths from where GDAL support files are
# sought.

## @fn PopFinderLocation()
# Remove the latest addition from the set of support file search
# paths.

## @fn FinderClean()
# Clear the set of support file search paths.

## @fn $FindFile($class, $basename)
#
# \brief Search for GDAL support files.
#
# An example:
# \code
# use Geo::GDAL;
# $a = Geo::GDAL::FindFile('gdal', 'pcs.csv');
# print STDERR "$a\n";
# \endcode
# Prints (for example):
# \code
# c:\msys\1.0\local\share\gdal\pcs.csv
# \endcode
#
# @param class The class of files to search for. For example 'gdal'.
# @param basename The basename of the file to search for. For example
#  'pcs.csv'.
# @return the path to the searched file or undef.

## @fn SetConfigOption($key, $value)
# @param key A GDAL config option. Possible values include
# 'GDAL_FORCE_CACHING', 'USE_RRD', GDAL_DATA', 'GDAL_SKIP',
# 'GDAL_DRIVER_PATH', 'GDAL_IGNORE_AXIS_ORIENTATION',
# 'GMLJP2OVERRIDE', 'GDAL_DISABLE_READDIR_ON_OPEN',
# 'GDAL_PAM_ENABLED', 'GDAL_PAM_MODE', 'GDAL_PAM_PROXY_DIR',
# 'GDAL_MAX_DATASET_POOL_SIZE', 'GDAL_FORCE_CACHING', 'GDAL_CACHEMAX',
# 'GDAL_SWATH_SIZE', 'PROJSO', 'CENTER_LONG',
# 'OGR_DEBUG_ORGANIZE_POLYGONS', and 'OGR_ORGANIZE_POLYGONS'.
# Consult the GDAL main documentation for the semantics of config options.
# @param value A value for the option, typically 'YES', 'NO',
# undef, a path, or a filename.

## @fn $GetConfigOption($key, $default)
# @param key A GDAL config option.
# @param default A default value for the option.
# @return the value of the GDAL config option or the value of the
# default parameter.

## @ignore CPLBinaryToHex()

## @ignore CPLHexToBinary()

## @fn \@GCPsToGeoTransform(\@GCPs, $ApproxOK = 1)
# Compute transformation coefficients from a set of Geo::GDAL::GCP
# objects
# The geo transformation has the form
# \code
# x = a + column * b + row * c
# y = d + column * e + row * f
# \endcode
# where<br/>
# (column,row) is the location in pixel coordinates<br/>
# (x,y) is the location in projection coordinates<br/>
# @param GCPs A set of Geo::GDAL::GCP objects.
# @param ApproxOK Minimize the error in the coefficient.
# @return [$a, $b, $c, $d, $e, $f]

## @ignore AllRegister()

## @fn $GetCacheMax()
# @return maximum amount of memory (as bytes) for caching within GDAL.

## @fn SetCacheMax($Bytes)
# @param Bytes New maximum amount of memory for caching within GDAL.

## @fn $GetCacheUsed()
# @return the amount of memory currently used for caching within GDAL.

## @fn $GetDataTypeSize($GDALDataType)
# @param GDALDataType An integer (one of keys of
# %Geo::GDAL::TYPE_INT2STRING).
# @return the size as the number of bits.

## @fn @DataTypeValueRange($DataType)
# @param DataType Data type as string (one of Byte UInt16 Int16 UInt32
# Int32 Float32 Float64 CInt16 CInt32 CFloat32 CFloat64).
# @return the minimum, maximum range of the data type.

## @fn $DataTypeIsComplex($GDALDataType)
# @param GDALDataType An integer (one of keys of
# %Geo::GDAL::TYPE_INT2STRING).
# @return true if the data type is a complex number.

## @fn $DecToDMS($angle, $axis, $precision=2)
# Convert decimal degrees to degrees, minutes, and seconds string
# @param angle A number
# @param axis A string specifying latitude or longitude ('Long').
# @param precision
# @return a string nndnn'nn.nn'"L where n is a number and L is either
# N or E

## @fn $PackedDMSToDec($packed)
# @param packed DMS as a number DDDMMMSSS.SS
# @return decimal degrees

## @fn $DecToPackedDMS($dec)
# @param dec Decimal degrees
# @return packed DMS, i.e., a number DDDMMMSSS.SS

## @fn $NodeType($type)
# Convert between integer and string expressions of CPLXMLNodeTypes
# @param type
# @return type

## @fn \@ParseXMLString($XML)
# Parses a given XML into an array of arrays and returns a reference
# to that. An array in the structure is: (CPLXMLNodeType, value,
# child, child, ...). CPLXMLNodeType is an integer.
# @param XML
# @return an XMLTree

## @fn @NodeData($node)
# @param node
# @return ($NodeType, $value)

## @fn @Children($node)
# @param node
# @return

## @fn @Child($node, $i)
# @param node
# @param i 0 .. number of children - 1
# @return

## @fn $SerializeXMLTree(\@XMLTree)
# @param XMLTree
# @return XML

## @fn @Drivers()
# An example:
# \code
# use Geo::GDAL;
# for my $driver (Geo::GDAL::Drivers) {
#    print $driver->{ShortName},"\n";
# }
# \endcode
# Prints short names of all available GDAL raster drivers.
# @return all GDAL raster driver objects in a list.

## @fn $GetDriverCount()
# @return the number of available GDAL raster drivers.

## @fn Geo::GDAL::Driver Driver($driver)
# Create a driver object for the internal GDAL driver.
# \note aka GetDriver
# @param driver The name or number of the driver.
# @return a new Geo::GDAL::Driver object

## @fn Geo::GDAL::Driver GetDriverByName($ShortName)
# @param ShortName A short name of the driver.
# @return a new Geo::GDAL::Driver object

## @fn Geo::GDAL::Driver IdentifyDriver($name, $siblings)
# @param name A dataset path.
# @param siblings [optional] A list of names of files in the directory specified by \a name.
# @return a new Geo::GDAL::Driver object

## @fn ComputeMedianCutPCT($red, $green, $blue, $num_colors, $colors, $callback, $callback_data)
# \brief Compute an "optimal" color table for a three band image.
# @param red a Geo::GDAL::Band object
# @param green a Geo::GDAL::Band object
# @param blue a Geo::GDAL::Band object
# @param num_colors the desired number of colors 
# @param colors an empty Geo::GDAL::ColorTable object
# @param callback [optional] a reference to a subroutine, which will
# be called with parameters (number progress, string msg, callback_data)
# @param callback_data [optional]

## @fn DitherRGB2PCT($red, $green, $blue, $target, $colors, $callback, $callback_data)
# \brief Dither a three band image into one band using a color table.
# @param red a Geo::GDAL::Band object
# @param green a Geo::GDAL::Band object
# @param blue a Geo::GDAL::Band object
# @param target a Geo::GDAL::Band object
# @param colors a Geo::GDAL::ColorTable object
# @param callback [optional] a reference to a subroutine, which will
# be called with parameters (number progress, string msg, callback_data)
# @param callback_data [optional]

## @fn ReprojectImage($src_ds, $dst_ds, $src_wkt=undef, $dst_wkt=undef, $ResampleAlg='NearestNeighbour', $WarpMemoryLimit=0, $maxerror=0.0, $callback, $callback_data)
# @param src_ds Source dataset.
# @param dst_ds Destination dataset.
# @param src_wkt Source projection as a WKT.
# @param dst_wkt Destination projection as a WKT.
# @param ResampleAlg One of NearestNeighbour Bilinear Cubic or CubicSpline.
# @param WarpMemoryLimit The amount of memory allowed for caching. Default is 0, i.e., no limit.
# @param maxerror Maximum error measured in input pixels that is
# allowed in approximating the transformation. Default is 0.0, i.e.,
# exact calculations.
# @param callback [optional] a reference to a subroutine, which will
# be called with parameters (number progress, string msg, callback_data)
# @param callback_data [optional]

## @fn Geo::GDAL::Dataset AutoCreateWarpedVRT(Geo::GDAL::Dataset src, $src_wkt=undef, $dst_wkt=undef, $ResampleAlg='NearestNeighbour', $maxerror=0.0)
# @param src
# @param src_wkt A WKT string.
# @param dst_wkt A WKT string.
# @param ResampleAlg one of 'NearestNeighbour', 'Bilinear', 'Cubic', or 'CubicSpline'.
# @param maxerror
# @return a new Geo::GDAL::Dataset object

## @fn ComputeProximity(Geo::GDAL::Band src, Geo::GDAL::Band proximity, \%options, $callback, $callback_data)
# @param src The raster from which the proximities are computed from.
# @param proximity The raster to which the proximities are computed to.
# @param options Options. Supported key, value pairs are 
# - VALUES => n[,n]* A list of target pixel values to measure the
# distance from.  If this option is not provided proximity will be
# computed from non-zero pixel values.  Currently pixel values are
# internally processed as integers.
# - DISTUNITS => PIXEL|GEO Indicates whether distances will be
# computed in pixel units or in georeferenced units.  The default is
# pixel units.  This also determines the interpretation of MAXDIST.
# - MAXDIST => n The maximum distance to search.  Proximity distances
# greater than this value will not be computed.  Instead output pixels
# will be set to a nodata value.
# - NODATA => n The NODATA value to use on the output band for pixels
# that are beyond MAXDIST.  If not provided, the hProximityBand will
# be queried for a nodata value.  If one is not found, 65535 will be
# used.
# - FIXED_BUF_VAL => n If this option is set, all pixels within the
# MAXDIST threadhold are set to this fixed value instead of to a
# proximity distance.
# @param callback [optional] a reference to a subroutine, which will
# be called with parameters (number progress, string msg, callback_data)
# @param callback_data [optional]

## @fn RasterizeLayer(Geo::GDAL::Dataset ds, \@bands, Geo::OGR::Layer layer, $transformer, $arg, \@burn_values, \%options, $callback, $callback_data)
# @param ds
# @param bands A reference to a list of bands to be updated.
# @param layer
# @param transformer Not supported, must be undef.
# @param arg Transformer argument, must be undef.
# @param burn_values Values to be used for burning the geometries. One for each layer.
# @param options Not used.
# @param callback [optional] a reference to a subroutine, which will
# be called with parameters (number progress, string msg, callback_data)
# @param callback_data [optional]

## @fn Polygonize(Geo::GDAL::Band src, Geo::GDAL::Band mask, Geo::OGR::Layer out, $PixValField, \%options, $callback, $callback_data)
# @param src
# @param mask All pixels in the mask band with a value other than zero
# will be considered suitable for collection as polygons. Must be
# undef if not used.
# @param out
# @param PixValField The index (or name) of the field in output layer
# into which the pixel value of the polygon should be written.
# @param options Not used.
# @param callback [optional] a reference to a subroutine, which will
# be called with parameters (number progress, string msg, callback_data)
# @param callback_data [optional]

## @fn SieveFilter(Geo::GDAL::Band src, Geo::GDAL::Band mask, Geo::GDAL::Band dst, $threshold, $connectedness, \%options, $callback, $callback_data)
# Removes small raster polygons.
# @param src
# @param mask
# @param dst
# @param threshold An integer.
# @param connectedness 4 or 8
# @param options Not used.
# @param callback [optional] a reference to a subroutine, which will
# be called with parameters (number progress, string msg, callback_data)
# @param callback_data [optional]

## @fn RegenerateOverviews(Geo::GDAL::Band src, \@overviews, $resampling, $callback, $callback_data)
# @todo This is not yet available
# @param src
# @param overviews A list of Geo::GDAL::Band's for the overviews.
# @param resampling 'NEAREST', 'AVERAGE', or 'GAUSS'
# @param callback [optional] a reference to a subroutine, which will
# be called with parameters (number progress, string msg, callback_data)
# @param callback_data [optional]

## @fn RegenerateOverview(Geo::GDAL::Band src, Geo::GDAL::Band overview, $resampling, $callback, $callback_data)
# @param src
# @param overview
# @param resampling 'NEAREST', 'AVERAGE', or 'GAUSS'
# @param callback [optional] a reference to a subroutine, which will
# be called with parameters (number progress, string msg, callback_data)
# @param callback_data [optional]

## @fn \@GeneralCmdLineProcessor(\@argv, $options = 0)
# @param argv
# @param options integer
# @return arrayref

## @fn $PackCharacter($DataType)
# Get the character that is needed for Perl's pack and unpack when
# they are used with Geo::GDAL::Band::ReadRaster and
# Geo::GDAL::Band::WriteRaster. Note that Geo::GDAL::Band::ReadTile
# and Geo::GDAL::Band::WriteTile have simpler interfaces that do not
# require pack and unpack.
# @param DataType GDAL data type value, typically from $band->{DataType}
# @return character which can be used in Perl's pack and unpack

## @fn Geo::GDAL::Dataset Open($name, $access='ReadOnly')
# An example
# \code
# use Geo::GDAL;
# $ds = Geo::GDAL::Open('existing.tiff', 'Update');
# \endcode
# @param name
# @param access either 'ReadOnly' or 'Update'
# @return a new Geo::GDAL::Dataset object

## @fn Geo::GDAL::Dataset OpenShared($name, $access='ReadOnly')
# @param name
# @param access either 'ReadOnly' or 'Update'
# @return a new Geo::GDAL::Dataset object

## @fn $GetDataTypeName($GDALDataType)
# @deprecated use string names
# @param GDALDataType
# @return

## @fn $GetDataTypeByName($GDALDataType)
# @deprecated use string names
# @param GDALDataType
# @return

## @fn $GetColorInterpretationName($ColorInterpretation)
# @deprecated use string names
# @param ColorInterpretation
# @return

## @fn $GetPaletteInterpretationName($PaletteInterpretation)
# @deprecated use string names
# @param PaletteInterpretation
# @return


## @class Geo::GDAL::MajorObject
# @isa (Geo::GDAL)

## @ignore DISOWN
## @ignore ACQUIRE

## @attr DOMAINS
# a class specific list, well known metadata domains

## @cmethod Domains
# @return the class specific DOMAINS list

## @method $Description($description)
# @param description [optional]
# @return the description in a non-void context.

## @method $GetDescription()
# @return

## @method SetDescription($NewDesc)
# @param NewDesc

## @method \%Metadata(\%metadata = undef, $domain = '')
# @param metadata
# @param domain
# @return the metadata in a non-void context.

## @method \%GetMetadata($domain = "")
# @param domain
# @return

## @method SetMetadata(\%metadata, $domain = "")
# @param metadata
# @param domain


## @class Geo::GDAL::Driver
# @isa (Geo::GDAL::MajorObject Geo::GDAL)

## @ignore DISOWN
## @ignore ACQUIRE

## @ignore Register()

## @ignore Deregister()

## @attr ShortName
# $driver->{ShortName}

## @attr LongName
# $driver->{LongName}

## @attr HelpTopic
# $driver->{HelpTopic}

## @method Rename($NewName, $OldName)
# Rename (move) a GDAL dataset.
# @param NewName String.
# @param OldName String.

# @method $Name
# @return The short name of the driver.

## @cmethod @Capabilities()
# @return A list of capabilities. The class method returns a list of
# all potential capabilities a driver may have; the object method
# returns a list of all capabilities the driver has.
# Examples.
# \code
# @all_capabilities = Geo::GDAL::Driver::Capabilities;
# @capabilities_of_the_geotiff_driver = Geo::GDAL::Driver('GTiff')->Capabilities;
# \endcode

## @method $TestCapability($cap)
# Test whether the driver has the specified capability.
# @param cap A capability string.
# @return a boolean value.

## @method $Extension()
# @return a suggested extension or extensions (e.g., ext1/ext2) for
# datasets.

## @method $MIMEType()
# @return a suggested MIME type for datasets.

## @method @CreationOptionList()
# @return a list of options, each option is a hashref, the keys are
# name, type and description or Value. Value is a listref.

## @method @CreationDataTypes()
# @return a list of data types (strings) that can be used for new datasets.

## @method Geo::GDAL::Dataset Create($name, $xsize, $ysize, $bands =1, $type = 'Byte', \%options = undef)
# Create a GDAL dataset using this driver.
# \note aka CreateDataset
# @brief Create a new Geo::GDAL::Dataset
# @param name
# @param xsize
# @param ysize
# @param bands
# @param type One of the data types this driver supports.
# @param options An anonymous hash of driver specific parameters.
# @return a new Geo::GDAL::Dataset object

## @method Geo::GDAL::Dataset Copy($name, $src, $strict = 1, \%options = undef)
# Copy a GDAL dataset.
# \note aka CopyDataset
# @brief Create a new Geo::GDAL::Dataset as a copy of an existing dataset.
# @param name
# @param src A Geo::GDAL::Dataset object.
# @param strict
# @param options An anonymous hash of driver specific parameters.
# @return a new Geo::GDAL::Dataset object.

## @method Delete($name)
# @param name


## @class Geo::GDAL::GCP
# @isa (Geo::GDAL)

## @ignore DISOWN
## @ignore ACQUIRE
## @ignore DESTROY

## @cmethod $new($x = 0.0, $y = 0.0, $z = 0.0, $pixel = 0.0, $line = 0.0, $info = "", $id = "")
# @param x
# @param y
# @param z
# @param pixel
# @param line
# @param info
# @param id
# @return a new Geo::GDAL::GCP object

## @attr GCPX
# scalar (access as $gcp->{GCPX})

## @attr GCPY
# scalar (access as $gcp->{GCPY})

## @attr GCPZ
# scalar (access as $gcp->{GCPZ})

## @attr GCPPixel
# scalar (access as $gcp->{GCPPixel})
# the pixel's j coordinate

## @attr GCPLine
# scalar (access as $gcp->{GCPLine})
# the pixel's i coordinate

## @attr Info
# scalar (access as $gcp->{Info})

## @attr Id
# scalar (access as $gcp->{Id})


## @class Geo::GDAL::Dataset
# @isa (Geo::GDAL::MajorObject Geo::GDAL)

## @ignore DISOWN
## @ignore ACQUIRE
## @ignore DESTROY

## @attr RasterXSize
# scalar (access as $dataset->{RasterXSize})

## @attr RasterYSize
# scalar (access as $dataset->{RasterYSize})

## @attr RasterCount
# scalar (access as $dataset->{RasterCount})

## @cmethod Geo::GDAL::Dataset Open($name, $access='ReadOnly')
# An example:
# \code
# use Geo::GDAL;
# $ds = Geo::GDAL::Dataset::Open('/data/dem.tiff', 'Update');
# \endcode
# @param name
# @param access Either 'ReadOnly' or 'Update'.
# @return a new Geo::GDAL::Dataset object.

## @cmethod Geo::GDAL::Dataset OpenShared($name, $access='ReadOnly')
# @param name
# @param access Either ReadOnly or Update.
# @return a new Geo::GDAL::Dataset object.

## @method @Size()
# @return (width, height)

## @method Geo::GDAL::Driver GetDriver()
# @return a new Geo::GDAL::Driver object

## @method Geo::GDAL::Band Band($index)
# Create a band object for the band within the dataset.
# \note aka GetRasterBand
# @param index 1...RasterCount
# @return a new Geo::GDAL::Band object

## @method @Bands()
# @return a list of new Geo::GDAL::Band objects

## @method $Projection($projection)
# Get or set the projection.
# @param projection [optional] as WKT
# @return the projection as WKT

## @method $GetProjection()
# @return the projection as WKT

## @ignore $GetProjectionRef()
# @return the projection as WKT

## @method $SetProjection($proj)
# @param proj projection as WKT

## @method @GeoTransform(@geo_transform)
# Transformation from pixel coordinates (x,y) to projection
# coordinates (Xp, Yp)
# \code
# Xp = geo_transform[0] + x*geo_transform[1] + y*geo_transform[2]
# Yp = geo_transform[3] + x*geo_transform[4] + y*geo_transform[5]
# \endcode
# @param geo_transform [optional]
# @return the geo transform in a non-void context.

## @method \@GetGeoTransform()
# @return a reference to an array of six parameters.

## @method SetGeoTransform(\@GeoTransform)
# @param GeoTransform

## @method BuildOverviews($resampling, \@overviews, $callback, $callback_data)
# @param resampling Either 'NEAREST', 'AVERAGE', or 'AVERAGE_MAGPHASE'.
# @param overviews The list of overview decimation factors to
# build. For example [2,4,8].
# @param callback [optional] a reference to a subroutine, which will
# be called with parameters (number progress, string msg, callback_data)
# @param callback_data [optional]

## @method @GCPs(@GCPs, $GCPProjection)
# Get or set the GCPs and their projection.
# @param GCPs [optional] a list of Geo::GDAL::GCP objects
# @param GCPProjection [optional] Projection string.
# @return a list of Geo::GDAL::GCP objects followed by a GCPProjection

## @method $GetGCPCount()
# @return the number of GCPs

## @method $GetGCPProjection()
# @return projection string.

## @method \@GetGCPs()
# @return 

## @method SetGCPs(\@GCPs, $GCPProjection)
# @param GCPs
# @param GCPProjection

## @method FlushCache()
# Write cached data to disk. There is usually no need to call this
# method.

## @method AddBand($datatype = 'Byte', \%options = 0)
# Add a new band to the dataset. The driver must support the action.
# @param datatype Data type string. The data type must be supported by
# the driver of this dataset. GDAL raster data types are Byte UInt16
# Int16 UInt32 Int32 Float32 Float64 CInt16 CInt32 CFloat32 CFloat64.
# @param options A reference to a hash of format specific key=>value options.

## @method WriteRaster($xoff, $yoff, $xsize, $ysize, $buf, $buf_xsize = undef, $buf_ysize = undef, $buf_type = undef, \@band_list = undef)
# Write a buffer into the raster. Create the buffer with \a pack function of Perl.
# <a href="http://www.gdal.org/classGDALDataset.html">Entry in GDAL docs (method RasterIO)</a>
# @param xoff
# @param yoff
# @param xsize
# @param ysize
# @param buf
# @param buf_xsize
# @param buf_ysize
# @param buf_type
# @param band_list

## @method $ReadRaster($xoff, $yoff, $xsize, $ysize, $buf_xsize = undef, $buf_ysize = undef, $buf_type = undef, \@band_list = undef)
# Read a buffer from the raster.
# @param xoff
# @param yoff
# @param xsize
# @param ysize
# @param buf_xsize
# @param buf_ysize
# @param buf_type
# @param band_list
# @return a buffer, open the buffer with unpack.

## @method CreateMaskBand()


## @class Geo::GDAL::Band
# @isa ( Geo::GDAL::MajorObject Geo::GDAL )

## @ignore DISOWN
## @ignore ACQUIRE

## @attr XSize
# scalar (access as $band->{XSize})

## @attr YSize
# scalar (access as $band->{YSize})

## @method $DataType()
# @return a data type string (Byte, UInt16, Int16, UInt32, Int32, Float32,
# Float64, CInt16, CInt32, CFloat32, or CFloat64).
## @method @Size()
# @return the size of the band as a list (width, height).

## @method @GetBlockSize()
# @return the size of a preferred i/o raster blocks as a list (width,
# height).

## @method $ColorInterpretation($color_interpretation)
# Color interpretation is currently one of Undefined GrayIndex
# PaletteIndex RedBand GreenBand BlueBand AlphaBand HueBand
# SaturationBand LightnessBand CyanBand MagentaBand YellowBand
# BlackBand
# @param color_interpretation [optional] new color interpretation
# @return color interpretation

## @method $NoDataValue($NoDataValue)
# @param NoDataValue [optional]
# Get or set the no data value.
# @note There does not exist a good way to clear the no data
# value. $band->NoDataValue(undef) does not do what you want.
# @return the nodata value.

## @method $GetNoDataValue()
# @return number (the "no data" value) or undef (there is no "no data" value).

## @method SetNoDataValue($NoDataValue)
# @param NoDataValue A number. undef does not do what it should do.

## @method $GetMinimum()
# @return statistical minimum of the band or undef if statistics are
# not kept or computed.

## @method $GetMaximum()
# @return statistical minimum of the band or undef if statistics are
# not kept or computed.

## @method $GetOffset()
# Scale and offset used to store data values in transformed form. The
# conversion function is:
# \code
# Units value = (raw value * scale) + offset
# \endcode
# @return offset or undef.

## @method $GetScale()
# Scale and offset are used to store data values in transformed form. The
# conversion function is:
# \code
# Units value = (raw value * scale) + offset
# \endcode
# @return scale or undef.

## @method @GetStatistics($approx_ok, $force)
# @param approx_ok Whether it is allowed to compute the statistics
# based on overviews or similar.
# @param force Whether to force scanning of the whole raster.
# @return a list ($min, $max, $mean, $stddev).

## @method SetStatistics($min, $max, $mean, $stddev)
# Save the statistics of the band if possible (the format can save
# arbitrary metadata).
# @param min
# @param max
# @param mean
# @param stddev

## @method $GetOverviewCount()
# @return the number of overviews available of the band.

## @method Geo::GDAL::Band GetOverview($band)
# @param band 0..GetOverviewCount-1
# @return a new Geo::GDAL::Band object.

## @method $Checksum($xoff = 0, $yoff = 0, $xsize = undef, $ysize = undef)
# Computes a checksum from the raster or a part of it.
# @param xoff
# @param yoff
# @param xsize
# @param ysize
# @return the checksum.

## @method ComputeRasterMinMax($approx_ok = 0)
# @return arrayref MinMax = [min, max]

## @method ComputeBandStats($samplestep = 1)
# @param samplestep
# @return arrayref Stats [mean, stddev]

## @method Fill($real_part, $imag_part = 0.0)
# Fill the band with a constant value.
# @param real_part Real component of fill value.
# @param imag_part Imaginary component of fill value.

## @method WriteTile($data, $xoff = 0, $yoff = 0)
# @param data A two-dimensional Perl array, organizes as data->[y][x], y =
# 0..height-1, x = 0..width-1.
# @param xoff
# @param yoff

## @method \@ReadTile($xoff = 0, $yoff = 0, $xsize = <width>, $ysize = <height>)
# @param xoff
# @param yoff
# @param xsize
# @param ysize
# @return a two-dimensional Perl array, organizes as data->[y][x], y =
# 0..height-1, x = 0..width-1.

## @method WriteRaster($xoff, $yoff, $xsize, $ysize, $buf, $buf_xsize = undef, $buf_ysize = undef, $buf_type = undef)
# @param xoff
# @param yoff
# @param xsize
# @param ysize
# @param buf The data to be written in a binary buffer. Use the \a
# pack function of Perl to prepare a buffer.
# @param buf_xsize
# @param buf_ysize
# @param buf_type

## @method $ReadRaster($xoff, $yoff, $xsize, $ysize, $buf_xsize = undef, $buf_ysize = undef, $buf_type = undef)
# @param xoff
# @param yoff
# @param xsize
# @param ysize
# @param buf_xsize
# @param buf_ysize
# @param buf_type
# @return the data in a binary buffer. Use the \a unpack function of
# Perl to get the data from the buffer.

## @method @GetHistogram(%parameters)
# Compute histogram from the raster.
# @param parameters Named parameters:
# - \a Min the lower bound, default is -0.5
# - \a Max the upper bound, default is 255.5
# - \a Buckets the number of buckets in the histogram, default is 256
# - \a IncludeOutOfRange whether to use $histogram[0] and
# $histogram[$#histogram] for out of range values, default is false;
# the bucket size is (Max-Min) / Buckets if this is false and
# (Max-Min) / (Buckets-2) if this is true
# - \a ApproxOK if histogram can be computed from overviews, default is false
# - \a Progress an optional progress function, the default is undef
# - \a ProgressData data for the progress function, the default is undef
# @return a list which contains the count of values in each bucket

## @method FlushCache()
# Write cached data to disk. There is usually no need to call this
# method.

## @method Geo::GDAL::ColorTable ColorTable($ColorTable)
# Get or set the color table of this band.
# @param ColorTable [optional] a Geo::GDAL::ColorTable object
# @return a new Geo::GDAL::ColorTable object in a non-void context.

## @method Geo::GDAL::ColorTable GetRasterColorTable()
# @return a color table object.

## @method SetRasterColorTable($ColorTable)
# @param ColorTable A color table object.

## @method CreateMaskBand()

## @method Geo::GDAL::Band GetMaskBand()

## @method $GetMaskFlags()

## @method @CategoryNames(@names)
# @param names [optional]
# @return

## @method $GetRasterCategoryNames()
# @return

## @method SetRasterCategoryNames($names)
# @param names

## @method Geo::GDAL::RasterAttributeTable AttributeTable($AttributeTable)
# @param AttributeTable [optional] A Geo::GDAL::RasterAttributeTable object.
# @return a new Geo::GDAL::RasterAttributeTable object, whose data is
# contained within the band.

## @method Geo::GDAL::RasterAttributeTable GetDefaultRAT()
# @deprecated use Geo::GDAL::Band::AttributeTable, which makes sure
# the band is not destroyed before the attribute table.
# @return a new Geo::GDAL::RasterAttributeTable object, whose data is
# contained within the band.

## @method SetDefaultRAT($AttributeTable)
# @param AttributeTable a Geo::GDAL::RasterAttributeTable object

## @method Geo::OGR::Layer Contours($DataSource, \%LayerConstructor, $ContourInterval, $ContourBase, \@FixedLevels, $NoDataValue, $IDField, $ElevField, $callback, $callback_data)
# Generate contours for this raster band. This method can also be used with named parameters.
# @param DataSource a Geo::OGR::DataSource object, default is a Memory data source
# @param LayerConstructor data for Geo::OGR::DataSource::CreateLayer, default is {Name => 'contours'}
# @param ContourInterval default is 100
# @param ContourBase default is 0
# @param FixedLevels a reference to a list of fixed contour levels, default is []
# @param NoDataValue default is undef
# @param IDField default is '', i.e., no field
# @param ElevField default is '', i.e., no field
# @param callback [optional] a reference to a subroutine, which will
# be called with parameters (number progress, string msg, callback_data)
# @param callback_data [optional]
# @return

## @method $GetRasterColorInterpretation()
# @deprecated use Geo::GDAL::Band::ColorInterpretation, which understands strings

## @method SetRasterColorInterpretation()
# @deprecated use Geo::GDAL::Band::ColorInterpretation, which understands strings


## @class Geo::GDAL::ColorTable
# @isa ( Geo::GDAL::MajorObject Geo::GDAL )

## @ignore DISOWN
## @ignore ACQUIRE
## @ignore DESTROY

## @cmethod Geo::GDAL::ColorTable new($GDALPaletteInterp = $Geo::GDAL::Const::GPI_RGB)
# @deprecated use Geo::GDAL::ColorTable::create, which uses string constants
# @return a new Geo::GDAL::ColorTable object

## @cmethod Geo::GDAL::ColorTable create($GDALPaletteInterp = 'RGB')
# @return a new Geo::GDAL::ColorTable object

## @method Geo::GDAL::ColorTable Clone()
# @return a new Geo::GDAL::ColorTable object

## @method $GetPaletteInterpretation()
# @return paletter interpretation (string)

## @method $GetCount()
# @return scalar (count of color entries as int)

## @method @ColorEntries(@color_entries)
# Get or set the color entries.
# @param color_entries [optional]
# @return a table of color entries (a list of lists) in a non void context

## @method @ColorEntry($i, @color)
# Get or set a color entry.
# @param i
# @param color [optional]
# @return a color entry

## @method @GetColorEntry($i)
# @param i
# @return array ColorEntry = ($c1, $c2, $c3, $c4)

## @method @GetColorEntryAsRGB($i)
# @param i
# @return array ColorEntry = ($r, $g, $b, $alpha)

## @method SetColorEntry($index, @ColorEntry)
# @param index
# @param ColorEntry a list or a reference to an array

## @method CreateColorRamp($start_index, \@start_color, $end_index, \@end_color)
# @param start_index
# @param start_color
# @param end_index
# @param end_color


## @class Geo::GDAL::RasterAttributeTable
# @isa = ( Geo::GDAL::MajorObject Geo::GDAL )

## @ignore DISOWN
## @ignore ACQUIRE
## @ignore DESTROY

## @cmethod Geo::GDAL::RasterAttributeTable new()
# @return a new Geo::GDAL::RasterAttributeTable object

## @cmethod @FieldTypes()
# @return

## @cmethod @FieldUsages()
# @return

## @method Geo::GDAL::RasterAttributeTable Clone()
# @return a new Geo::GDAL::RasterAttributeTable object

## @method SetRowCount($count)
# @param count

## @method $GetRowCount()

## @method %Columns(%columns)
# A get/set method for the columns of the RAT
# @param columns optional, a the keys are column names and the values are anonymous
# hashes with keys Type and Usage
# @return a hash similar to the optional input parameter

## @method CreateColumn($name, $type, $usage)
# @param name
# @param type one of FieldTypes
# @param usage one of FieldUsages

## @method $GetColumnCount()
# @return

## @method $GetNameOfCol($column)
# @param column
# @return

## @method $GetUsageOfCol($column)
# @param column
# @return

## @method $GetTypeOfCol($column)
# @param column
# @return

## @method $GetColOfUsage($usage)
# @param usage
# @return

## @method $GetRowOfValue($value)
# @param value a pixel value
# @return row index or -1

## @method $Value($row, $column, $value)
# @param row
# @param column
# @param value [optional]
# @return

## @method $GetValueAsString($row, $column)
# @param row
# @param column
# @return

## @method $GetValueAsInt($row, $column)
# @param row
# @param column
# @return

## @method $GetValueAsDouble($row, $column)
# @param row
# @param column
# @return

## @method SetValueAsString($row, $column, $value)
# @param row
# @param column
# @param value

## @method SetValueAsInt($row, $column, $value)
# @param row
# @param column
# @param value

## @method SetValueAsDouble($row, $column, $value)
# @param row
# @param column
# @param value
