package Geo::GoogleEarth::Pluggable::LookAt;
use strict;
use warnings;
use base qw{Geo::GoogleEarth::Pluggable::Constructor};
use XML::LibXML::LazyBuilder qw{E};

our $VERSION='0.17';

=head1 NAME

Geo::GoogleEarth::Pluggable::LookAt - Geo::GoogleEarth::Pluggable LookAt package

=head1 SYNOPSIS

  my $lookat=$document->LookAt(
                               latitude  => 38.1741527,
                               longitude => -96.7839388,
                               range     => 3525808,
                               heading   => 0,
                               tilt      => 0,
                              );

Assign LookAt during construction

  my $folder=$document->Folder(name=>"MyLook", lookat=>$lookat);
  my $point=$folder->Point(lat=>$lat, lon=>$lon, lookat=>$lookat);

Assign LookAt afer construction

  $document->lookat($lookat);
  $folder->lookat($lookat);
  $point->lookat($lookat);

Do it all at one time

  my $point=$folder->Point(lat    => $lat,
                           lon    => $lon,
                           lookat => $document->LookAt(%data));

=head1 DESCRIPTION

Provides a way to configure a LookAt for all Folders and Placemarks.

=head1 USAGE

=head1 CONSTRUCTOR

All Folder objects have a LookAt constructor.

  my $object=$document->LookAt(%data);
  my $object=$folder->LookAt(%data);

=head2 new

=head2 type

Returns the object type.

  my $type=$lookat->type;


=cut

sub type {'LookAt'};

=head2 latitude

=cut

sub latitude {
  my $self=shift;
  $self->{'latitude'}=shift if @_;
  return $self->{'latitude'};
}

=head2 longitude

=cut

sub longitude {
  my $self=shift;
  $self->{'longitude'}=shift if @_;
  return $self->{'longitude'};
}

=head2 range

=cut

sub range {
  my $self=shift;
  $self->{'range'}=shift if @_;
  return $self->{'range'};
}

=head2 tilt

=cut

sub tilt {
  my $self=shift;
  $self->{'tilt'}=shift if @_;
  return $self->{'tilt'};
}

=head2 heading

=cut

sub heading {
  my $self=shift;
  $self->{'heading'}=shift if @_;
  return $self->{'heading'};
}

=head2 node

Returns the L<XML::LibXML::LazyBuilder> element for the LookAt object.

=cut

sub node {
  my $self=shift;
  my @elements=();
  my %skip=map {$_=>1} qw{document};
  foreach my $key (sort keys %$self) {
    next if exists $skip{$key};
    push @elements, E($key => {}, $self->{$key});
  }
  return E(LookAt => {}, @elements);
}

=head1 BUGS

Please log on RT and send to the geo-perl email list.

=head1 SUPPORT

DavisNetworks.com supports all Perl applications including this package.

=head1 AUTHOR

  Michael R. Davis (mrdvt92)
  CPAN ID: MRDVT

=head1 COPYRIGHT

This program is free software licensed under the...

  The BSD License

The full text of the license can be found in the LICENSE file included with this module.

=head1 SEE ALSO

L<Geo::GoogleEarth::Pluggable> creates a GoogleEarth Document.

=cut

1;
