The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
## @class Geo::OGR
# @brief OGR utility functions.
#
# A wrapper for many OGR utility functions and a root class for all
# OGR classes.

## @ignore TermProgress
## @ignore TermProgress_nocb

## @ignore BuildPolygonFromEdges

## @ignore ApproximateArcAngles

## @ignore ForceTo
## @ignore ForceToLineString
## @ignore ForceToMultiLineString
## @ignore ForceToMultiPoint
## @ignore ForceToMultiPolygon
## @ignore ForceToPolygon

## @ignore GeneralCmdLineProcessor
## @ignore GeometryTypeToName
## @ignore GetFieldTypeName

## @ignore GeometryType
## @ignore GetFieldSubTypeName

## @cmethod @GeometryTypes()
# @return a list of all geometry types, currently:
# +list Geo::OGR wkb 25DBit,25Bit,NDR,XDR

## @cmethod list ByteOrders
# @return a list of byte order types, XDR and NDR. XDR denotes
# big-endian and NDR denotes little-endian.

## @method $GeometryTypeModify($type, $modifier)
# @param type a geometry type (one of Geo::OGR::GeometryTypes).
# @param modifier one of 'flatten', 'set_Z', 'make_collection', 'make_curve', or 'make_linear'.
# @return modified geometry type.

## @method $GeometryTypeTest($type, $test, $type2)
# @param type a geometry type (one of Geo::OGR::GeometryTypes).
# @param test one of 'has_z', 'is_subclass_of', 'is_curve', 'is_surface', or 'is_non_linear'.
# @param type2 a geometry type (one of Geo::OGR::GeometryTypes). Required for 'is_subclass_of' test.
# @return result of the test.

## @ignore CreateGeometryFromWkb
## @ignore CreateGeometryFromWkt
## @ignore CreateGeometryFromGML
## @ignore CreateGeometryFromJson

## @ignore Drivers
## @ignore GetDriverCount
## @ignore GetDriverByName
## @ignore Driver

## @method @GetDriverNames()
# @return a list of the names of available Geo::OGR::Drivers.

## @method Geo::OGR::Driver GetDriver($name)
# @param name a driver name. One of Geo::OGR::GetDriverNames.
# @return a Geo::OGR::Driver object that represents the internal driver.

## @method $GetOpenDSCount()
# @return the number of all open data sources.

## @method SetGenerate_DB2_V72_BYTE_ORDER($Generate_DB2_V72_BYTE_ORDER)
# Needed only on IBM DB2.

## @method Geo::OGR::DataSource GetOpenDS($number)
# @param number The number of the requested data source.
# @return a new Geo::OGR::DataSource object.

## @method Geo::OGR::DataSource Open($name, $update = 0)
# @param name The data source string (directory, filename, etc.).
# @param update Whether to open the data source in update mode.
# @return a new Geo::OGR::DataSource object.

## @method Geo::OGR::DataSource OpenShared($name, $update = 0)
# @param name The data source string (directory, filename, etc.).
# @param update Whether to open the data source in update mode.
# @return a new Geo::OGR::DataSource object.

## @ignore NullFID




## @class Geo::OGR::Driver
# @brief A vector format driver.
#
# A driver may, depending on its capabilities, create, open, copy, and
# delete data sources.
# @isa (Geo::OGR)

## @ignore Register
## @ignore Deregister

## @method @Capabilities()
# Both a class and an object method.
# @return a list of capabilities. The object method returns a list of
# the capabilities the driver has. The class method returns a list of
# all potential capabilities a driver may have. These are currently:
# +list Geo::OGR ODrC
#
# Examples:
# \code
# @all_capabilities = Geo::OGR::Driver::Capabilities;
# @capabilities_of_a_driver = Geo::OGR::Driver('KML')->Capabilities;
# \endcode

## @method $TestCapability($cap)
# @param cap A capability string.
# @return boolean value.

## @ignore CreateDataSource

## @method Geo::OGR::DataSource Create($name, hashref options = undef )
# Create an OGR data source object.
# @note a.k.a. CreateDataSource
# @param name The data source name.
# @param options Driver specific options.
#
# Usage:
# \code
# $ds = Geo::OGR::Driver('driver name')->Create('data source name', {});
# \endcode
# @return a new Geo::OGR::DataSource object.

## @ignore CopyDataSource

## @method Geo::OGR::DataSource Copy(Geo::OGR::DataSource source, $name, arrayref options = undef)
# Copy an OGR data source object.
# @note a.k.a. CopyDataSource
# @param source the Geo::OGR::DataSource object to be copied.
# @param name the name for the new data source.
# @param options driver specific options.
# @return a new Geo::OGR::DataSource object.

## @ignore OpenDataSource

## @method Geo::OGR::DataSource Open($name, $update = 0)
# Open an OGR data source object. Alternative name: OpenDataSource.
# @note a.k.a. GetDataSource
# @param name the name of data source.
# @param update whether to open the data source in update mode.
# @return a new Geo::OGR::DataSource object

## @ignore DeleteDataSource

## @method Delete($name)
# Delete an OGR data source.
# @note a.k.a. DeleteDataSource
# @param name The name of data source.

## @ignore GetName

## @method $Name()
# @note a.k.a. GetName
# @return the name of the driver.




## @class Geo::OGR::DataSource
# @brief A source and/or storage of vector data layers.
#
# A data source object may, depending on its capabilities, create,
# open (as such or using GDAL SQL), copy, and delete layers.
# @isa (Geo::OGR)

## @ignore SyncToDisk

## @method @Capabilities()
# Both a class and an object method.
# @return a list of capabilities. The object method returns a list of
# all capabilities the data source has. The class method returns a
# list of all potential capabilities a data source may have. These are
# currently:
# +list Geo::OGR ODsC

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

## @cmethod Geo::OGR::DataSource Open($name, $update = 0)
# An example:
# \code
# use Geo::GDAL;
# $ds = Geo::OGR::DataSource::Open('/data/roads.shp');
# \endcode
# @param name The data source name (directory, filename, etc.).
# @param update Whether to open the data source in update mode.
# @return a new Geo::OGR::DataSource object.

## @cmethod Geo::OGR::DataSource OpenShared($name, $update = 0)
# @param name The data source name (directory, filename, etc.).
# @param update Whether to open the data source in update mode.
# @return a new Geo::OGR::DataSource object.

## @ignore GetLayerByIndex
## @ignore GetLayerByName
## @ignore Layer

## @method Geo::OGR::Layer GetLayer($name)
# @param name the name of the requested layer. If not given, then
# returns the first layer in the data source.
# @return a new Geo::OGR::Layer object that represents the layer
# in the data source.

## @ignore GetLayerCount
## @ignore Layers

## @method @GetLayerNames()
# @note Delivers the functionality of undocumented method GetLayerCount.
# @return a list of the names of the layers this data source provides.

## @method Geo::OGR::Driver GetDriver()
# @return a Geo::OGR::Driver object for this data source.

## @method $GetName()
# @return the name of this data source.

## @method Geo::OGR::Layer CreateLayer(%params)
# @brief Create a new layer into this data source.
#
# @param %params A list of named parameters:
# - \a Name (scalar) name for the new layer.
# - \a Fields (array reference) a list of field definitions as in 
# Geo::OGR::Layer::CreateField.
# - \a ApproxOK (boolean value, default is true) a flag, which is forwarded to Geo::OGR::Layer::CreateField.
# - \a Options (hash reference) driver specific hash of layer creation options.
# - \a Schema (hash reference, deprecated) may contain keys Name, Fields, GeomFields, GeometryType.
# - \a SRS (scalar, deprecated) the spatial reference for the default geometry field.
# - \a GeometryType (scalar) the type of the default geometry field (if only one geometry field).
#
# @note If Fields or Schema|Fields is not given, a default geometry
# field (Name => '', GeometryType => 'Unknown') is created. The type
# can be also set with the named parameter.
#
# Example:
# \code
# my $roads = Geo::OGR::Driver('Memory')->Create('road')->
# .   CreateLayer(
# .       Fields => [ { Name => 'class', 
# .                     Type => 'Integer' },
# .                   { Name => 'geom', 
# .                     Type => 'LineString25D' } ] );
# \endcode
# @return a new Geo::OGR::Layer object.

## @method Geo::OGR::Layer CopyLayer($layer, $name, hashref options = undef)
# @param layer A Geo::OGR::Layer object to be copied.
# @param name A name for the new layer.
# @param options A ref to a hash of format specific options.
# @return a new Geo::OGR::Layer object.

## @method DeleteLayer($name)
# Deletes a layer from the data source. Note that if there is a layer
# object for the deleted layer, it becomes unusable.
# @param name name of the layer to delete.

## @method Geo::OGR::Layer ExecuteSQL($statement, $geom = undef, $dialect = "")
# @param statement A SQL statement.
# @param geom A Geo::OGR::Geometry object.
# @param dialect
# @return a new Geo::OGR::Layer object. The data source object will
# exist as long as the layer object exists.

## @method ReleaseResultSet($layer)
# @param layer A layer the has been created with ExecuteSQL.
# @note There is no need to call this method. The result set layer is
# released in the destructor of the layer that was created with SQL.

## @ignore GetRefCount
## @ignore GetSummaryRefCount




## @class Geo::OGR::Layer
# @brief A collection of similar features.
#
# A layer object is typically obtained with a data source object. A
# layer has a data model (a schema), which is maintained in a
# definition object, and a set of features, which contain data
# according to the data model. The schema is typically set when the
# layer is created or opened, but it may be altered somewhat with
# methods Geo::OGR::Layer::CreateField,
# Geo::OGR::Layer::AlterFieldDefn, and
# Geo::OGR::Layer::DeleteField. Features and/or their data can be
# read, inserted and deleted. Reading can be filtered. Layers can be
# compared to each other with methods Clip, Erase, Identity,
# Intersection, SymDifference, Union, and Update.
# @isa (Geo::OGR)

## @method @Capabilities()
# Both a class and an object method.
# @return a list of capabilities. The object method returns a list of
# the capabilities the layer has. The class method returns a list of
# all potential capabilities a layer may have. These are currently:
# +list Geo::OGR OLC
#
# Examples:
# \code
# @cap = Geo::OGR::Layer::Capabilities(); # the class method
# @cap = $layer->Capabilities(); # the object method
# \endcode

## @method Clip(Geo::OGR::Layer method, Geo::OGR::Layer result, hashref options, subref callback, $callback_data)
# Clip off areas that are not covered by the method layer. The schema
# of the result layer can be set before calling this method, or is
# initialized to to contain all fields from
# this and method layer.
# @param method method layer.
# @param result result layer.
# @param options a reference to an options hash.
# @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 Intersection(Geo::OGR::Layer method, Geo::OGR::Layer result, hashref options, subref callback, $callback_data)
# The result layer contains features whose geometries represent areas
# that are common between features in the input layer and in the
# method layer. The schema of the result layer can be set before
# calling this method, or is initialized to contain all fields from
# this and method layer.
# @param method method layer.
# @param result result layer.
# @param options a reference to an options hash.
# @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 Union(Geo::OGR::Layer method, Geo::OGR::Layer result, hashref options, subref callback, $callback_data)
# The result layer contains features whose geometries represent areas
# that are in either in the input layer or in the method layer. The
# schema of the result layer can be set before calling this method, or
# is initialized to contain all fields from this and method layer.
# @param method method layer.
# @param result result layer.
# @param options a reference to an options hash.
# @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 SymDifference(Geo::OGR::Layer method, Geo::OGR::Layer result, hashref options, subref callback, $callback_data)
# The result layer contains features whose geometries represent areas
# that are in either in the input layer or in the method layer but not
# in both. The features in the result layer have attributes from both
# input and method layers. For features which represent areas that are
# only in the input or in the method layer the respective attributes
# have undefined values. The schema of the result layer can be set by
# the user or, if it is empty, is initialized to contain all fields in
# the input and method layers.
# @param method method layer.
# @param result result layer.
# @param options a reference to an options hash.
# @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 Identity(Geo::OGR::Layer method, Geo::OGR::Layer result, hashref options, subref callback, $callback_data)
# The result layer contains features whose geometries represent areas
# that are in the input layer. The features in the result layer have
# attributes from both input and method layers. The schema of the
# result layer can be set by the user or, if it is empty, is
# initialized to contain all fields in input and method layers.
# @param method method layer.
# @param result result layer.
# @param options a reference to an options hash.
# @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 Update(Geo::OGR::Layer method, Geo::OGR::Layer result, hashref options, subref callback, $callback_data)
# The result layer contains features whose geometries represent areas
# that are either in the input layer or in the method layer. The
# features in the result layer have areas of the features of the
# method layer or those ares of the features of the input layer that
# are not covered by the method layer. The features of the result
# layer get their attributes from the input layer. The schema of the
# result layer can be set by the user or, if it is empty, is
# initialized to contain all fields in the input layer.
# @param method method layer.
# @param result result layer.
# @param options a reference to an options hash.
# @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 Erase(Geo::OGR::Layer method, Geo::OGR::Layer result, hashref options, subref callback, $callback_data)
# The result layer contains features whose geometries represent areas
# that are in the input layer but not in the method layer. The
# features in the result layer have attributes from the input
# layer. The schema of the result layer can be set by the user or, if
# it is empty, is initialized to contain all fields in the input
# layer.
# @param method method layer.
# @param result result layer.
# @param options a reference to an options hash.
# @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 $TestCapability($cap)
# @param cap A capability string.
# @return a boolean value indicating whether the layer has the
# specified capability.

## @method Geo::OSR::SpatialReference SpatialReference($name, Geo::OSR::SpatialReference sr)
# @note A.k.a GetSpatialRef.
# Get or set the projection of a spatial field of this layer. Gets or
# sets the projection of the first field if no field name is given.
# @param name [optional] a name of a spatial field in this layer.
# @param sr [optional] a Geo::OSR::SpatialReference object,
# which replaces the existing projection.
# @return a Geo::OSR::SpatialReference object, which represents the
# projection in the given spatial field.

## @method Geo::OGR::DataSource GetDataSource()
# @return the data source object to which this layer object belongs to.

## @ignore FindFieldIndex

## @method %GetFieldDefn($name)
# Get the definition of a field.
# @param name the name of the field.
# @return the field definition object, either Geo::OGR::FieldDefn or
# Geo::OGR::GeomFieldDefn.

## @ignore CreateGeomField

## @method CreateField(%params)
# Create a field.
# @param params as in Geo::OGR::FieldDefn::new or
# Geo::OGR::GeomFieldDefn::new, plus ApproxOK (whose default is true).

## @method AlterFieldDefn($name, %params)
# @param field the name of the field to be altered.
# @param params as in Geo::OGR::FieldDefn::new. Width and
# Precision should be both or neither.
# @note Only non-spatial fields can be altered.
# @note Also the deprecated form AlterFieldDefn($field,
# Geo::OGR::FieldDefn $Defn, $Flags) works.

## @method DeleteField($field)
# Delete an existing field from a layer.
# @param field name (or index) of the field which is deleted
# @note Only non-spatial fields can be deleted.

## @ignore Schema

## @method \%GetSchema()
# @brief Get the schema of this layer.
# @note The schema of a layer cannot be set with this method.  If you
# have a Geo::OGR::FeatureDefn object before creating the layer, use
# its schema in the Geo::OGR::CreateLayer method.
# @return the schema of this layer, as in Geo::OGR::FeatureDefn::Schema.

## @method \%Row(%row)
# Get and/or set the data of a feature that has the supplied feature
# id (the next feature obtained with GetNextFeature is used if feature
# id is not given). Calls Geo::OGR::Feature::Row.
# @param row [optional] feature data
# @return a reference to feature data in a hash

## @method @Tuple(@tuple)
# Get and/set the data of a feature that has the supplied feature id
# (the next feature obtained with GetNextFeature is used if feature id
# is not given). The expected data in the tuple is: ([feature id,]
# non-spatial fields, spatial fields). Calls Geo::OGR::Feature::Tuple.
# @param tuple [optional] feature data
# @note The schema of the tuple needs to be the same as that of the
# layer.
# @return a reference to feature data in an array

## @method Geo::OGR::Geometry SpatialFilter($filter)
# @param filter [optional] a Geo::OGR::Geometry object or a string. An
# undefined value removes the filter if there is one.
# @return a new Geo::OGR::Geometry object

## @method Geo::OGR::Geometry SpatialFilter(@filter)
# @param filter [optional] a rectangle ($minx, $miny, $maxx, $maxy).
# @return a new Geo::OGR::Geometry object

## @method SetSpatialFilter($filter)
# @param filter [optional] a Geo::OGR::Geometry object. If not given,
# removes the filter if there is one.

## @method SetSpatialFilterRect($minx, $miny, $maxx, $maxy)
# @param minx
# @param miny
# @param maxx
# @param maxy

## @method Geo::OGR::Geometry GetSpatialFilter()
# @return a new Geo::OGR::Geometry object

## @method SetAttributeFilter($filter_string)
# Set or clear the attribute filter.
# @param filter_string a SQL WHERE clause or undef to clear the
# filter.

## @method ResetReading()
# Initialize the layer object for iterative reading.

## @method Geo::OGR::Feature GetNextFeature()
# @return iteratively Geo::OGR::Feature objects from the layer. The
# iteration obeys the spatial and the attribute filter.

## @method SetNextByIndex($new_index)
# @param new_index the index to which set the read cursor in the
# current iteration

## @method $GetFeaturesRead()
# @return integer

## @method ForFeatures($code, $in_place)
# @note experimental, the syntax may change
#
# Call code for all features. This is a simple wrapper for
# ResetReading and while(GetNextFeature).
#
# Example usage:
# \code
# $layer->ForFeatures(sub {my $f = shift; $self->DeleteFeature($f->FID)}); # empties the layer
# \endcode
#
# @param code a reference to a subroutine, which is called with each
# feature as an argument
# @param in_place if set to true, the feature is stored back to the
# layer

## @method ForGeometries($code, $in_place)
# @note experimental, the syntax may change
#
# Call code for all geometries. This is a simple wrapper for
# ResetReading and while(GetNextFeature).
#
# Example usage:
# \code
# my $area = 0;
# $layer->ForGeometries(sub {my $g = shift; $area += $g->Area}); # computes the total area
# \endcode
#
# @param code a reference to a subroutine, which is called with each
# geometry as an argument
# @param in_place if set to true, the geometry is stored back to the
# layer

## @method $GetName()
# @return the name of the layer.

## @method Geo::OGR::Feature GetFeature($fid)
# @param fid feature id
# @return a new Geo::OGR::Feature object that represents the feature in the layer.

## @method SetFeature($feature)
# @note The feature should have the same schema as the layer.
#
# Replaces a feature in the layer based on the given feature's
# id. Requires RandomWrite capability.
# @param feature a Geo::OGR::Feature object

## @method CreateFeature($feature)
# @deprecated use Geo::OGR::Layer::InsertFeature which accepts Perl
# data and checks for geometry type and attribute data
#
# @note The feature should have the same schema as the layer.
#
# Inserts a feature into the layer. The given feature's id may change.
# @param feature a Geo::OGR::Feature object

## @method InsertFeature($feature)
# Creates a new feature which has the schema of the layer and
# initializes it with data from the argument. Then inserts the feature
# into the layer (using CreateFeature). Uses Geo::OGR::Feature::Row or
# Geo::OGR::Feature::Tuple.
# @param feature a Geo::OGR::Feature object or reference to feature
# data in a hash (as in Geo::OGR::Feature::Row) or in an array (as in
# Geo::OGR::Feature::Tuple)

## @method DeleteFeature($fid)
# @param fid feature id

## @method SyncToDisk()

## @ignore GetLayerDefn

## @method Geo::OGR::FeatureDefn GetDefn()
# A.k.a GetLayerDefn.
# @return a Geo::OGR::FeatureDefn object.

## @method $GetFeatureCount($force = 1)
# @param force
# @return integer

## @method @GetExtent($force = 1)
# @param force compute the extent even if it is expensive
# @note In scalar context returns a reference to an anonymous array
# containing the extent.
# @note The order of values is different from those returned by
# Geo::OGR::Geometry::GetEnvelope.
# @return the extent ($minx, $miny, $maxx, $maxy)

# @param force
# @return the extent = ($minx, $miny, $maxx, $maxy) as a listref

## @method StartTransaction()

## @method CommitTransaction()

## @method RollbackTransaction()

## @ignore GetSpatialRef

## @ignore GetRefCount

## @method $GetFIDColumn()
# @return the name of the underlying database column being used as the
# FID column, or "" if not supported.

## @ignore GetGeometryColumn
## @ignore GetGeomType

## @method @GetFieldNames()
# @return a list of the names of the fields in this layer. The
# non-geometry field names are first in the list and then the geometry
# fields.

## @method $GetFieldDef($name)
# @param name name of the field.
# @return the definition object of the given field. Either
# Geo::OGR::FieldDefn or Geo::OGR::GeomFieldDefn.

## @method SetIgnoredFields(@fields)
# @param fields a list of field names




## @class Geo::OGR::Feature
# @brief A collection of non-spatial and spatial attributes.
#
# A feature is a collection of non-spatial and spatial attributes and
# an id, which is a special attribute, and data records according to
# this data model. Attributes are called fields and some fields are
# spatial, i.e., their value is a geometry. Fields have at least a
# name and a type. Features may exist within a layer or
# separetely. The data model of a feature is a definition object.
# @isa (Geo::OGR)

## @cmethod Geo::OGR::Feature new(%schema)
# @param schema as in Schema
# @return a new Geo::OGR::Feature object

## @method $DumpReadable()
# Write the contents of this feature to stdout.

## @method $Validate(list flags)
# @param flags one of more of null, geom_type, width,
# allow_null_when_default, or all.
# @exception croaks with an error message if the feature is not valid.
# @return integer denoting the validity of the feature object.

## @ignore Schema

## @method \%GetSchema()
# @brief Get the schema of this feature. 
# @return the schema of this layer, as in Geo::OGR::FeatureDefn::Schema.

## @method \%Row(%row)
# @note This method discards the data the destination feature (or
# layer) does not support. Changes in data due to differences between
# field types may also occur.
#
# Get and/or set the data of the feature. The key of the (key,value)
# pairs of the row is the field name. Special field names FID and
# Geometry are used for feature id and geometry respectively. The
# geometry is set and get using the Geo::OGR::Feature::Geometry
# method. Field values are set using the Geo::OGR::Feature::SetField
# method.
# @param row [optional] feature data in a hash.
# @return a reference to feature data in a hash. Spatial fields are
# returned as Geo::OGR::Geometry objects.

## @method @Tuple(@tuple)
# @note This method discards the data the destination feature (or
# layer) does not support. Changes in data due to differences between
# field types may also occur.
#
# @note The schema of the tuple needs to be the same as that of the
# feature.
#
# Get and/set the data of the feature. The expected data in the tuple
# is ([feature_id,] non-spatial fields, spatial fields). The fields in
# the order they are in the schema. Field values are set using the
# Geo::OGR::Feature::Field method. Geometries are set and get using
# the Geo::OGR::Feature::Geometry method.
# @param tuple [optional] feature data in an array
# @return feature data in an array

## @ignore GetDefnRef

## @method Geo::OGR::FeatureDefn GetDefn()
# @note A.k.a GetDefnRef.
# @return a Geo::OGR::FeatureDefn object, which represents the definition of this feature.

## @ignore GetFieldDefnRef
## @ignore GetFieldType
## @ignore GetGeomFieldDefnRef

## @method Geo::OGR::FieldDefn GetFieldDefn($name)
# @note A.k.a GetFieldDefnRef
# @param name the name of the field.
# @return a new Geo::OGR::FieldDefn object that represents the field
# in question.

## @method Geo::OGR::Feature Clone()
# @return a new Geo::OGR::Feature object

## @method $Equal($feature)
# @param feature a Geo::OGR::Feature object for comparison
# @return boolean

## @ignore GetFieldIndex
## @ignore GetGeomFieldIndex
## @ignore GetFieldCount
## @ignore GetGeomFieldCount

## @method @GetFieldNames()
# Get the names of the fields in this feature.

## @ignore GetFieldAsString
## @ignore GetFieldAsInteger
## @ignore GetFieldAsDouble
## @ignore GetFieldAsDateTime
## @ignore GetFieldAsDoubleList
## @ignore GetFieldAsIntegerList
## @ignore GetFieldAsStringList

## @method @GetField($name)
# @note A number of GetFieldAs* methods exist but they are not
# documented. Syntax $feature->{field} can be used to access the
# field (v1.9.0)
# @param name the name of the field
# @return the value of the field, which may be a scalar or a list,
# depending on the field type.

## @ignore SetFieldDoubleList
## @ignore SetFieldIntegerList
## @ignore SetFieldStringList

## @method SetField($name, @Value)
# @note Syntax $feature->{field} can be used to access the
# field (v1.9.0)
# @param name the name of the field.
# @param Value a string, integer, double, a list (year, month,
# day), a list (hour, minute, second, tzflag), a list (year, month,
# day, hour, minute, second, tzflag), or a list of integers, doubles,
# or strings.
# @note If value is not given or is undefined this method unsets the field.

## @method Field($name, @Value)
# @brief Get or set the field.
# @param name the name of the field.
# @param Value a scalar or list depending on the field type.
# @return the value of the field, which may be a scalar or a list,
# depending on the field type.

## @ignore SetGeometry
## @ignore SetGeometryDirectly
## @ignore GetGeometry
## @ignore GetGeometryRef
## @ignore GetGeomFieldRef
## @ignore SetGeomField
## @ignore SetGeomFieldDirectly

## @method $Geometry($name, $geometry)
# @brief Get or set the value of a geometry field.
# @note This method delivers the functionality of undocumented methods
# SetGeometry($geometry), SetGeometryDirectly, SetGeomField,
# SetGeomFieldDirectly, GetGeometry, GetGeometryRef.
#
# Set or get the geometry in the feature. When setting, does a check
# against the schema (GeometryType) of the feature. The ownership of
# the geometry is given (if the parameter is an object) or kept to the
# feature and thus the geometry will keep the feature alive as long as
# the geometry is alive.
# @param name [optional] the name of the spatial field,
# whose geometry is to be set. If not given, sets or gets the geometry
# of the first spatial field.
# @param geometry [optional] a Geo::OGR::Geometry object or a hash
# array from which such can be created (using
# Geo::OGR::Geometry::new)
# @return in a non-void context the geometry in the feature
# as a Geo::OGR::Geometry object.

## @ignore SetFromWithMap

## @method SetFrom($other, $forgiving = 1, hashref map)
# @param other a Geo::OGR::Feature object
# @param forgiving [optional] set to false if the operation should not
# continue if output fields do not match some of the source fields
# @param map [optional] a mapping from output field indexes to source
# fields, include into the hash all field indexes of this feature
# which should be set

## @method $IsFieldSet($field)
# @param field the name (or index) of the field
# @return boolean

## @method UnsetField($field)
# @note Field value can be unset by calling SetField without
# parameters or with an undefined argument.
# @param field the name (or index) of the field

## @method $FID($id)
# @brief Get or set the id of this feature.
# @param id [optional] the id to set for this feature.
# @return integer the id of this feature.

## @method $GetFID()
# @return the feature id (an integer).

## @method SetFID($id)
# @param id the feature id.

## @method DumpReadable()

## @ignore StyleString

## @method $GetStyleString()
# @return a string

## @method SetStyleString($string)
# @param string




## @class Geo::OGR::FeatureDefn
# @brief A definition of the attributes of a feature class or a layer.
#
# A definition object is a collection of field definition objects. A
# read-only definition object is obtained from a layer or a feature.
# @isa (Geo::OGR)

## @cmethod Geo::OGR::FeatureDefn new(%schema)
# Creates a new layer or feature definition. The new definition is
# either initialized to the given schema or it will contain no
# non-spatial fields and one spatial field, whose Name is '' and
# GeometryType is 'Unknown' or the value of the named parameter
# GeometryType.
# @param schema [optional] The schema for the new feature definition,
# as in Geo::OGR::FeatureDefn::Schema.
# @return a Geo::OGR::FeatureDefn object
#
# Example usage:
# \code
# $fd = Geo::OGR::FeatureDefn->new( 
#     Name => "name",
#     Fields => [{ Name => 'field1', Type => 'String' },
#                { Name => 'geom', GeometryType => 'Point' }] );
# \endcode

## @ignore Schema

## @method \%GetSchema()
# @brief Get the schema of this feature or layer definition. 
#
# The schema is a hash whose keywords are Name, StyleIgnored and
# Fields. Fields is an anonymous array of first non-spatial and then
# spatial field schemas as in Geo::OGR::FieldDefn::Schema and
# Geo::OGR::GeomFieldDefn::Schema.
# @return the schema of this feature or layer definition.

## @ignore Name

## @method $GetName()
# @return the name of this layer or feature definition.

## @ignore GetFieldIndex
## @ignore GetFieldCount
## @ignore GetGeomFieldCount
## @ignore GetGeomFieldIndex

## @method @GetFieldNames()
# The names of the fields in this layer or feature definition.
# @return the list of field names.

## @ignore GeometryIgnored
## @ignore GeometryType
## @ignore GetGeomFieldDefn

## @method object GetFieldDefn($name)
# @param name the name of the field.
# @return either a Geo::OGR::FieldDefn or Geo::OGR::GeomFieldDefn
# object that represents the field in question.

## @ignore AddFieldDefn
## @ignore AddGeomFieldDefn

## @method AddField(%params)
# @param params named parameters to create a new Geo::OGR::FieldDefn
# or Geo::OGR::GeomFieldDefn object.

## @ignore DeleteGeomFieldDefn

## @method DeleteField($name)
# @note Currently only geometry fields can be deleted.
# @param index the index of the geometry field to be deleted.

## @ignore GeomType
## @ignore GetGeomType
## @ignore SetGeomType

## @method $GeometryType($geometry_type)
# Get or set the geometry type of this feature definition.
# @deprecated returns the type of the first spatial field. Use
# Geo::OGR::Layer::GeometryType($index),
# Geo::OGR::Feature::GeometryType($index),
# Geo::OGR::GeomFieldDefn::GeometryType, or the schema.
#
# @note a.k.a. GeomType, GetGeomType (deprecated, returns an integer),
# SetGeomType (deprecated, requires an integer)
# @param geometry_type [optional] one of \@Geo::OGR::GeometryTypes
# @return the geometry type, one of \@Geo::OGR::GeometryTypes

## @ignore GetReferenceCount

## @ignore IsGeometryIgnored
## @ignore SetGeometryIgnored

## @method $GeometryIgnored($IgnoreState)
# @deprecated gets or sets the ignore status of the first spatial
# field. Use Geo::OGR::GeomFieldDefn::Ignored or set the keyword in
# schema in creation.
#
# @note a.k.a. GetGeometryIgnored (only get), SetGeometryIgnored (only set)
#
# Get or set the ignore status of geometry when fetching features.
# @return the ignore status of geometry
# @since 1.9.0

## @ignore StyleIgnored

## @method $IsStyleIgnored()
# Get the ignore status of style information when fetching features.
# @return the ignore status of style information
# @since 1.9.0

## @method SetStyleIgnored($IgnoreState)
# Set the ignore status of style information when fetching features.
# @since 1.9.0

## @method IsSame(Geo::OGR::FeatureDefn defn)
# @return true if this definition is similar to the other definition,
# false otherwise.




## @class Geo::OGR::FieldDefn
# @brief A definition of a non-spatial attribute.
# @isa (Geo::OGR)

## @cmethod list Types
# Field types supported by GDAL. Current list is
# +list Geo::OGR OFT

## @cmethod list JustifyValues
# Justify values supported by GDAL. Current list is
# +list Geo::OGR OJ

## @cmethod Geo::OGR::FieldDefn new(%params)
# @brief Create a new field definition.
#
# This method supports both an argument list and named arguments.
#
# @param name Field name (please do not try to name the field as Name or Type etc.).
# @param type One of supported field types
# (see Geo::OGR::FieldDefn::Types). Optional. Default is String.
#
# or
#
# @param params one or more of:
# - \a Name Field name (default is 'unnamed').
# - \a Type Field type, one of Geo::OGR::FieldDefn::Types (default is 'String').
# - \a SubType Field sub type, one of Geo::OGR::FieldDefn::SubTypes.
# - \a Justify Justify value, one of Geo::OGR::FieldDefn::JustifyValues
# - \a Width
# - \a Precision
# - \a Nullable (default is true)
# - \a Default 
# - \a Ignored (default is false)
# @return a new Geo::OGR::FieldDefn object

## @method \%Schema(%params)
# Get the schema or set parts of the schema
# @param params [optional] as those in Geo::OGR::FieldDefn::new.
# @return a reference to a hash whose keys are as those in Geo::OGR::FieldDefn::new.

## @ignore GetName
## @ignore GetNameRef
## @ignore SetName

## @method $Name($name)
# Get and/or set the name of the field.
# @note a.k.a. GetName, GetNameRef, SetName
# @param name [optional]
# @return the name in non-void context

## @ignore GetFieldTypeName
## @ignore GetTypeName
## @ignore GetType
## @ignore SetType

## @method $Type($type)
# @note a.k.a. GetFieldTypeName, GetTypeName, GetType, SetType
# @param type [optional] One of field types (Geo::OGR::FieldDefn::Types).
# @return one of field types in non-void context.

## @ignore GetSubType
## @ignore SetSubType

## @method $SubType($SubType)
# @note a.k.a. GetSubType, SetSubType
# @param SubType [optional] One of field sub types (Geo::OGR::FieldDefn::SubTypes).
# @return the sub type of this field in non-void context.

## @ignore GetJustify
## @ignore SetJustify

## @method $Justify($justify)
# Get and/or set the justification of this field.
# @note a.k.a. GetJustify, SetJustify
# @param justify [optional] One of field justify types (Geo::OGR::FieldDefn::JustifyValues).
# @return the justify value of this field in non-void context.

## @ignore GetWidth
## @ignore SetWidth

## @method $Width($width)
# Get and/or set the field width.
# @note a.k.a. GetWidth, SetWidth
# @param width [optional]
# @return the width of this field in non-void context.

## @ignore GetPrecision
## @ignore SetPrecision

## @method $Precision($precision)
# Get and/or set the precision of this field.
# @note a.k.a. GetPrecision, SetPrecision
# @param precision [optional]
# @return the precision of this field in non-void context.

## @ignore IsNullable
## @ignore SetNullable

## @method $Nullable($nullable)
# Get or set the nullable constraint for this field.
# @note a.k.a. IsNullable and SetNullable
# @param nullable [optional]
# @return the nullable value of this field in non-void context.

## @ignore GetDefault
## @ignore SetDefault

## @method $Default($value)
# Get or set the default value for this field.
# @note a.k.a. GetDefault and SetDefault
# @param value [optional]
# @return the default value of this field in non-void context.

## @ignore IsIgnored
## @ignore SetIgnored

## @method $Ignored($ignore)
# Get and/or set the ignore status (whether this field should be
# omitted when fetching features) of this field.
# @note a.k.a. IsIgnored, SetIgnored
# @param ignore [optional]
# @return the ignore status of this field in non-void context.
# @since 1.9.0




## @class Geo::OGR::GeomFieldDefn
# @brief A definition of a spatial attribute.
# @isa (Geo::OGR)

## @cmethod Geo::OGR::GeomFieldDefn new(%params)
# @brief Create a new spatial field definition.
#
# @param params one or more of:
# - \a Name name for the field (default is 'geom').
# - \a GeometryType type for the field type, one of Geo::OGR::GeomFieldDefn::Types (default is 'Unknown').
# - \a SpatialReference a Geo::OSR::SpatialReference object.
# - \a Nullable (default is true)
# - \a Ignored (default is false)
# @return a new Geo::OGR::GeomFieldDefn object

## @method \%Schema(%params)
# Get the schema or set parts of the schema.
# @param params [optional] as those in Geo::OGR::GeomFieldDefn::new.
# @return a reference to a hash whose keys are as those in Geo::OGR::GeomFieldDefn::new.

## @method Type
# @return the type of this geometry field. One of Geo::OGR::GeomFieldDefn::Types

## @cmethod Types
# @return a list of all geometry types, currently:
# +list Geo::OGR wkb 25DBit,25Bit,NDR,XDR

## @ignore GetName
## @ignore GetNameRef
## @ignore SetName

## @method $Name($name)
# @note a.k.a. GetName, GetNameRef, SetName
# @return the name of the field.

## @ignore GetType
## @ignore SetType

## @method $GeometryType($type)
# @note a.k.a. GetType, SetType
# @return the geometry type of the field.

## @ignore GetSpatialRef
## @ignore SetSpatialRef

## @method $SpatialReference($sr)
# @note a.k.a. GetSpatialRef, SetSpatialRef
# @return the spatial reference of the field as a Geo::OSR::SpatialReference object.

## @ignore IsNullable
## @ignore SetNullable

## @method $Nullable($nullable)
# @note a.k.a. IsNullable, SetNullable
# @return the nullable status of the field.

## @ignore IsIgnored
## @ignore SetIgnored

## @method $Ignored($ignore)
# @note a.k.a. IsIgnored, SetIgnored
# @return the ignore status of the field.




## @class Geo::OGR::Geometry
# @isa (Geo::OGR)
# @brief Spatial data.
#
# A geometry is spatial data (coordinate values, and a reference to a
# spatial reference system) organized into one of the geometry
# types. Geometries can be created from several type of data including
# a Perl data structure. There are several methods, which modify,
# compare, test, or compute values from geometries.
# @note Most spatial analysis methods require <a
# href="http://geos.osgeo.org/doxygen/">GEOS</a> to work rigorously.

## @cmethod @GeometryTypes()
# Same as Geo::OGR::GeometryTypes

## @cmethod list ByteOrders
# Same as Geo::OGR::ByteOrders

## @cmethod Geo::OGR::Geometry new(%params)
# @param %params A named parameter, one of: WKT, WKB, HEXWKB,
# HEXEWKB, GML, GeoJSON, arc, or GeometryType and optionally Points.
# - \a GeometryType one the supported geometry types, see Geo::OGR::GeometryTypes.
# - \a WKT a well known text string, which defines a geometry.
# - \a WKB a well known binary string, which defines a geometry.
# - \a HEXWKB WKB in hexadecimal.
# - \a HEXEWKB PostGIS extended WKB.
# - \a GML geometry written in Geographic Markup Language.
# - \a GeoJSON geometry written in GeoJSON (JavaScript Object Notation for Geographic data).
# - \a arc a reference to a list of values defining an arc: [CenterX,
#    CenterY, CenterZ, PrimaryRadius, SecondaryRadius, Rotation,
#    StartAngle, EndAngle, MaxAngleStepSizeDegrees] (see also Geo::OGR::Geometry::ApproximateArcAngles)
# - \a Points An anonymous array as in method
#      Geo::OGR::Geometry::Points; Note: requires also GeometryType
#      parameter
#
# @note uses CreateGeometryFrom* functions from Geo::OGR
#
# @return a new Geo::OGR::Geometry object.
# Usage:
# \code
# $g = Geo::OGR::Geometry->new(...arguments...);
# \endcode

## @cmethod Geo::OGR::Geometry ApproximateArcAngles(%params)
# Create a line string, which approximates an arc. 
# @note All angles are in degrees.
#
# @param %params named parameters, these are:
# - \a Center center point (default is [0, 0, 0])
# - \a PrimaryRadius default is 1,
# - \a SecondaryAxis default is 1,
# - \a Rotation default is 0,
# - \a StartAngle default is 0,
# - \a EndAngle default is 360,
# - \a MaxAngleStepSizeDegrees default is 4 
# @return a new Geo::OGR::Geometry object.

## @method FlattenTo2D()

## @method $CoordinateDimension($dimension)
# @param dimension [optional]
# @return 2 or 3

## @method $GetCoordinateDimension()
# @return an integer

## @method SetCoordinateDimension($dimension)
# @param dimension

## @method $GetDimension()
# @return 0, 1, or 2

## @ignore AsText
## @ignore ExportToWkt
## @ignore ExportToIsoWkt
## @ignore AsBinary
## @ignore AsHEXWKB
## @ignore AsHEXEWKB
## @ignore ExportToWkb
## @ignore ExportToIsoWkb
## @ignore AsGML
## @ignore ExportToGML
## @ignore AsKML
## @ignore ExportToKML
## @ignore AsJSON
## @ignore ExportToJson

## @method $As(%params)
# Export the geometry into a known format.

# @param params named parameters, either: Text (a.k.a WKT), WKB
# (a.k.a. Binary) (ByteOrder can also be defined, default is 'XDR'),
# ISO WKT and WKB, HEXWKB, HEXEWKB (srid can also be given), GML,
# GeoJSON, Binary.

# @note Uses As\<format\>/ExportTo\<format\> methods.
# @return the geometry in a given format.

## @method AddPoint($x, $y, $z)
# Set the data of a point or add a point to a line string. Consider
# using Geo::OGR::Geometry::Points.  Note that the coordinate
# dimension is automatically upgraded to 25D (3) if z is given.
# @param x
# @param y
# @param z [optional]
# Calls internally the 2D or 3D version depending on the number of parameters.

## @method AddPoint_2D($x, $y)
# Set the data of a point or add a point to a line string. Consider
# using Geo::OGR::Geometry::Points.
# @param x
# @param y

## @method AddPoint_3D($x, $y, $z)
# Set the data of a point or add a point to a line string. Note that
# the coordinate dimension is automatically upgraded to 25D (3). Consider
# using Geo::OGR::Geometry::Points.
# @param x
# @param y
# @param z

## @method SetPoint($index, $x, $y, $z)
# Set the data of a point or a line string. Note that the coordinate
# dimension is automatically upgraded to 25D (3) if z is given.
# @param index
# @param x
# @param y
# @param z [optional]

## @method SetPoint_2D($index, $x, $y)
# @param index
# @param x
# @param y

## @method SetPoint_3D($index, $x, $y, $z)
# Set the data of a point or a line string. Note that the coordinate
# dimension is automatically upgraded to 25D (3).
# @param index
# @param x
# @param y
# @param z

## @method $GetPointCount()
# @return an integer

## @method @GetPoint($index = 0)
# @param index
# @return (x,y) or a list with more coordinates

## @method $GetPoint_2D($index = 0)
# @param index
# @return (x,y) or a list with more coordinates

## @method $GetPoint_3D($index = 0)
# @param index
# @return (x,y) or a list with more coordinates

## @method $GetX($index = 0)
# @param index
# @return a number

## @method $GetY($index = 0)
# @param index
# @return a number

## @method $GetZ($index = 0)
# @param index
# @return a number

## @method @Point($index, $x, $y, $z)
# Get or set the point
# @param index The index of the point. Optional (ignored if given) for
# Point and Point25D geometries.
# @param x [optional]
# @param y [optional]
# @param z [optional]
# @return

## @method \@Points(arrayref points)
# Get or set the points of the geometry. The points (vertices) are
# stored in obvious lists of lists. When setting, the geometry is
# first emptied. The method uses internally either AddPoint_2D or
# AddPoint_3D depending on the coordinate dimension of the input data.
#
# @note The same structure may represent different geometries
# depending on the actual geometry type of the object.
#
# @param points [optional] A reference to an array. A point is a reference to an
# array of numbers, a linestring or a ring is a reference to an array of points,
# a polygon is a reference to an array of rings, etc. 
#
# @return A reference to an array.

## @method Empty()
# Clear geometry data, i.e., remove all points, or, for a point, set
# the coordinate dimension as zero.

## @method $IsEmpty()
# Test whether the geometry is empty (has no points, or, for a point,
# has coordinate dimension of zero).
# @return boolean

## @method $IsRing()
# Test if the geometry is a ring. Requires GEOS in GDAL.
# @return boolean

## @method $IsSimple()
# Test the simplicity of the geometry (OGC sense). Requires GEOS in GDAL.
# @return boolean

## @method $IsValid()
# Test the validity of the geometry (OGC sense). Requires GEOS in GDAL.
# @return boolean

## @method Move($dx, $dy, $dz)
# Move every point of the object as defined by the parameters.
# @param dx
# @param dy
# @param dz [optional]

## @method AddGeometryDirectly($other)
# @param other a Geo::OGR::Geometry object

## @method AddGeometry($other)
# Add a copy of another geometry to a geometry collection
# @param other a Geo::OGR::Geometry object

## @method Geo::OGR::Geometry Clone()
# @return a new Geo::OGR::Geometry object

## @method $GeometryType()
# @return the geometry type of this geometry (one of Geo::OGR::GeometryTypes).

## @method $Length()
# @return the length of the linestring

## @ignore GetArea

## @method $Area()
# @note a.k.a. GetArea
# @return the area of the polygon or multipolygon

## @method $GetGeometryCount()
# @return an integer

## @method $GetGeometryRef($index)
# @param index index to the geometry, which is a part of this geometry
# @return a new Geo::OGR::Geometry object whose data is a part of the
# parent geometry

## @method Geo::OGR::Geometry ConvexHull()
# @return a new Geo::OGR::Geometry object

## @method Geo::OGR::Geometry BuildPolygonFromEdges($BestEffort = 0, $AutoClose = 0, $Tolerance = 0)
# Attempt to create a polygon from a collection of lines or from a multilinestring.
# @param BestEffort For future
# @param AutoClose Assure the first and last points of rings are same.
# @param Tolerance Snap distance.
# @exception Several possibilities, some are reported, some are general errors.
# @return a new Geo::OGR::Geometry object (Polygon)

## @method Geo::OGR::Geometry Collect(@geometries)
# Create a geometrycollection from this and possibly other geometries.
# @param geometries [optional] More geometries to add to the collection.
# @return a new Geo::OGR::Geometry object of type geometrycollection.

## @method @Dissolve()
# Dissolve a geometrycollection into separate geometries.
# @return a list of new Geo::OGR::Geometry objects cloned from the collection.

## @method Geo::OGR::Geometry ForceTo($type, ref options)
# Attempt to make a geometry of type 'type' out of this geometry.
# @param type target geometry type. One of Geo::OGR::GeometryTypes.
# @param options not used currently.
# @return a new Geo::OGR::Geometry object.

## @method Geo::OGR::Geometry ForceToLineString()
# Attempt to create a line string from this geometry.
# @return a new Geo::OGR::Geometry object.

## @method Geo::OGR::Geometry ForceToPolygon()
# Attempt to create a polygon from this geometry.
# @exception None reported. If this method fails, just a copy is returned.
# @return a new Geo::OGR::Geometry object.

## @method Geo::OGR::Geometry ForceToMultiPoint(@points)
# Attempt to create a multipoint from the geometry, which must be a point.
# @param points [optional] More points to add to the collection.
# @return a new Geo::OGR::Geometry object of type multipoint.

## @method Geo::OGR::Geometry ForceToMultiLineString(@linestrings)
# Attempt to create a multilinestring from the geometry, which must be a linestring.
# @param linestrings [optional] More linestrings to add to the collection.
# @return a new Geo::OGR::Geometry object of type multilinestring.

## @method Geo::OGR::Geometry ForceToMultiPolygon(@polygons)
# Attempt to create a multipolygon from the geometry, which must be a polygon.
# @param polygons [optional] More polygons to add to the collection.
# @return a new Geo::OGR::Geometry object of type multipolygon.

## @method Geo::OGR::Geometry ForceToCollection(@geometries)
# Create a geometrycollection from the geometry.
# @param geometries [optional] More geometries to add to the collection.
# @return a new Geo::OGR::Geometry object of type geometrycollection.

## @method Geo::OGR::Geometry Buffer($distance, $quadsecs = 30)
# @param distance
# @param quadsecs
# @return a new Geo::OGR::Geometry object

## @method Geo::OGR::Geometry Intersection($other)
# @param other a Geo::OGR::Geometry object
# @return a new Geo::OGR::Geometry object

## @method Geo::OGR::Geometry Union($other)
# @param other a Geo::OGR::Geometry object
# @return a new Geo::OGR::Geometry object

## @method Geo::OGR::Geometry UnionCascaded()
# @return a new Geo::OGR::Geometry object
# @since 1.8.0

## @method Geo::OGR::Geometry Difference($other)
# @param other a Geo::OGR::Geometry object
# @return a new Geo::OGR::Geometry object

## @ignore SymmetricDifference

## @method Geo::OGR::Geometry SymDifference($other)
# Compute symmetric difference. 
# @note a.k.a. SymmetricDifference
# @param other a Geo::OGR::Geometry object
# @return a new Geo::OGR::Geometry object
# @since 1.8.0

## @ignore GetBoundary

## @method Geo::OGR::Geometry Boundary()
# @note a.k.a. GetBoundary
# @return the boundary of this geometry as a geometry
# @since 1.8.0

## @method $Distance($other)
# @param other a Geo::OGR::Geometry object
# @return the distance to the other geometry

## @ignore Intersect

## @method $Intersects($other)
# @note a.k.a. Intersect (deprecated)
# @param other a Geo::OGR::Geometry object
# @return true if this geometry intersects with the other geometry, false otherwise

## @ignore Equal

## @method $Equals($other)
# @note a.k.a. Equal (deprecated)
# @param other a Geo::OGR::Geometry object
# @return true if this geometry is equivalent to the other geometry, false otherwise

## @method $Disjoint($other)
# @param other a Geo::OGR::Geometry object
# @return true if this geometry is disjoint from the other geometry, false otherwise

## @method $Touches($other)
# @param other a Geo::OGR::Geometry object
# @return true if this geometry touches the other geometry, false otherwise

## @method $Crosses($other)
# @param other a Geo::OGR::Geometry object
# @return true if this geometry crosses the other geometry, false otherwise

## @method $Within($other)
# @param other a Geo::OGR::Geometry object
# @return true if this geometry is within the other geometry, false otherwise

## @method $Contains($other)
# @param other a Geo::OGR::Geometry object
# @return true if this geometry contains the other geometry, false otherwise

## @method $Overlaps($other)
# @param other a Geo::OGR::Geometry object
# @return true if this geometry overlaps the other geometry, false otherwise

## @method Segmentize($MaxLength)
# Modify the geometry such it has no segment longer than the given length.
# @param MaxLength the given length

## @method Geo::OGR::Geometry Simplify($Tolerance)
# Simplify the geometry.
# @param Tolerance the length tolerance for the simplification
# @since 1.8.0
# @return a new Geo::OSR::Geometry object

## @method TransformTo($srs)
# @param srs a Geo::OSR::SpatialReference object

## @method Transform($trans)
# @param trans a Geo::OSR::CoordinateTransformation object

## @method Geo::OSR::SpatialReference GetSpatialReference()
# @return a new Geo::OSR::SpatialReference object

## @method AssignSpatialReference($srs)
# @param srs a Geo::OSR::SpatialReference object

## @method CloseRings()

## @method @GetEnvelope()
# @note In scalar context returns a reference to an anonymous array
# containing the envelope.
# @note The order of values is different from those returned by
# Geo::OGR::Layer::GetExtent.
# @return the envelope ($minx, $maxx, $miny, $maxy)

## @method @GetEnvelope3D()
# @note In scalar context returns a reference to an anonymous array
# containing the envelope.
# @return the 3-D envelope ($minx, $maxx, $miny, $maxy, $minz, $maxz)
# @since 1.9.0

## @method Geo::OGR::Geometry Centroid()
# @return a new Geo::OGR::Geometry object
# @since 1.8.0

## @method $WkbSize()
# @return an integer

## @method $GetGeometryType()
# @deprecated use Geo::OGR::Geometry::GeometryType, which returns the
# type as a string.
#
# @return type as an integer

## @method $GetGeometryName()
# @deprecated use Geo::OGR::Geometry::GeometryType.
#
# @return a string