=encoding utf8

=head1 NAME

Geo::Space - A collection of various  items

=head1 INHERITANCE

 Geo::Space
   is a Geo::Shape

=head1 SYNOPSIS

 my $island1 = Geo::Line->filled(...);
 my $island2 = Geo::Space->new(...);
 my $islands = Geo::Space->new($island1, $island2)

=head1 DESCRIPTION

Where a L<Geo::Surface|Geo::Surface> can only contains sets of nested polygons, the
Space can contain anything you like: lines, points, and unrelated polygons.

Extends L<"DESCRIPTION" in Geo::Shape|Geo::Shape/"DESCRIPTION">.
 
=head1 METHODS

Extends L<"METHODS" in Geo::Shape|Geo::Shape/"METHODS">.
 
=head2 Constructors

Extends L<"Constructors" in Geo::Shape|Geo::Shape/"Constructors">.
 
=over 4

=item $obj-E<gt>B<new>( [$components], %options )

=item Geo::Space-E<gt>B<new>( [$components], %options )

When called as instance method, some defaults are copied from the
object where the call is made upon.  Usually called as class method.

$components are L<Math::Polygon|Math::Polygon>, L<Math::Polygon::Surface|Math::Polygon::Surface>,
L<Geo::Point|Geo::Point>, L<Geo::Line|Geo::Line>, L<Geo::Surface|Geo::Surface>, L<Geo::Space|Geo::Space> objects.

 -Option--Defined in--Default
  proj    Geo::Shape  see Geo::Proj::defaultProjection()

=over 2

=item proj => LABEL

=back

=back

=head2 Attributes

Extends L<"Attributes" in Geo::Shape|Geo::Shape/"Attributes">.
 
=over 4

=item $obj-E<gt>B<component>( $index, [$index, ...] )

Returns the component (or components) with the specified $index(es). One
L<Geo::Shape|Geo::Shape> object in scalar context, and multiple in list context.

=item $obj-E<gt>B<components>()

Returns a list of L<Geo::Shape|Geo::Shape> objects, all located in this space.

=item $obj-E<gt>B<lines>()

Returns a list of L<Geo::Line|Geo::Line> objects, which are defined as separate
components.

=item $obj-E<gt>B<nrComponents>()

Returns the number of components.

=item $obj-E<gt>B<onlyLines>()

Returns true when all components are lines; L<Geo::Line|Geo::Line> objects.

=item $obj-E<gt>B<onlyPoints>()

Returns true when all components are points; L<Geo::Point|Geo::Point> objects.

=item $obj-E<gt>B<onlyRings>()

Returns true when all components are closed lines; L<Geo::Line|Geo::Line> objects
each defined as ring.

=item $obj-E<gt>B<points>()

Returns a list of L<Geo::Point|Geo::Point> objects, which are defined as separate
components.

=item $obj-E<gt>B<proj>()

Inherited, see L<Geo::Shape/"Attributes">

=item $obj-E<gt>B<proj4>()

Inherited, see L<Geo::Shape/"Attributes">

=back

=head2 Projections

Extends L<"Projections" in Geo::Shape|Geo::Shape/"Projections">.
 
=over 4

=item $obj-E<gt>B<in>( <$label|'utm'> )

Inherited, see L<Geo::Shape/"Projections">

=item $obj-E<gt>B<projectOn>($nick, @points)

Inherited, see L<Geo::Shape/"Projections">

=back

=head2 Geometry

Extends L<"Geometry" in Geo::Shape|Geo::Shape/"Geometry">.
 
=over 4

=item $obj-E<gt>B<area>()

Returns the area enclosed by the combined components.  Only useful when
the points are in some orthogonal projection.

=item $obj-E<gt>B<bbox>()

Inherited, see L<Geo::Shape/"Geometry">

=item $obj-E<gt>B<bboxCenter>()

Inherited, see L<Geo::Shape/"Geometry">

=item $obj-E<gt>B<bboxRing>( [$xmin, $ymin, $xmax, $ymax, [$proj]] )

=item Geo::Space-E<gt>B<bboxRing>( [$xmin, $ymin, $xmax, $ymax, [$proj]] )

Inherited, see L<Geo::Shape/"Geometry">

=item $obj-E<gt>B<distance>( $object, [$unit] )

Inherited, see L<Geo::Shape/"Geometry">

=item $obj-E<gt>B<perimeter>()

The length of the outer polygons of all components. Only useful in a
orthogonal coordinate systems.

=back

=head2 Display

Extends L<"Display" in Geo::Shape|Geo::Shape/"Display">.
 
=over 4

=item $obj-E<gt>B<deg2dm>($degrees, $pos, $neg)

=item Geo::Space-E<gt>B<deg2dm>($degrees, $pos, $neg)

Inherited, see L<Geo::Shape/"Display">

=item $obj-E<gt>B<deg2dms>($degrees, $pos, $neg)

=item Geo::Space-E<gt>B<deg2dms>($degrees, $pos, $neg)

Inherited, see L<Geo::Shape/"Display">

=item $obj-E<gt>B<dms2deg>($dms)

=item Geo::Space-E<gt>B<dms2deg>($dms)

Inherited, see L<Geo::Shape/"Display">

=item $obj-E<gt>B<toString>( [$projection] )

Returns a string representation of the line, which is also used for
stringification.

example: 

=back

=head1 OVERLOAD

Extends L<"OVERLOAD" in Geo::Shape|Geo::Shape/"OVERLOAD">.
 
=over 4

=item overload: B<'""' (stringification)>

Inherited, see L<Geo::Shape/"OVERLOAD">

=item overload: B<'bool' (truth value)>

Inherited, see L<Geo::Shape/"OVERLOAD">

=back

=head1 DIAGNOSTICS

=over 4

=item Error: distance calculation not implemented between a $kind and a $kind

Only a subset of all objects can be used in the distance calculation.
The limitation is purely caused by lack of time to implement this.

=item Error: in() not implemented for a $class

=back

=head1 SEE ALSO

This module is part of Geo-Point distribution version 0.97,
built on January 23, 2018. Website: F<http://perl.overmeer.net/CPAN/>

=head1 LICENSE

Copyrights 2005-2018 by [Mark Overmeer]. For other contributors see ChangeLog.

This program is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.
See F<http://dev.perl.org/licenses/>

