Geo-Point
view release on metacpan or search on metacpan
lib/Geo/Line.pm view on Meta::CPAN
or die "ERROR: dms longitude coordinate not understood: $part\n";
push @longs, $long;
}
}
die "ERROR: expect two lats and two longs, but got "
. @lats."/".@longs."\n" if @lats!=2;
(min(@lats), min(@longs), max(@lats), max(@longs), $nick);
}
sub ringFromString($;$)
{ my $class = shift;
my ($xmin, $ymin, $xmax, $ymax, $nick) = $class->bboxFromString(@_)
or return ();
$class->bboxRing($xmin, $ymin, $xmax, $ymax, $nick);
}
#------------
sub geopoints()
{ my $self = shift;
my $proj = $self->proj;
map { Geo::Point->new(x => $_->[0], y => $_->[1], proj => $proj) }
$self->points;
}
sub geopoint(@)
{ my $self = shift;
my $proj = $self->proj;
unless(wantarray)
{ my $p = $self->point(shift) or return ();
return Geo::Point->(x => $p->[0], y => $p->[1], proj => $proj);
}
map { Geo::Point->(x => $_->[0], y => $_->[1], proj => $proj) }
$self->point(@_);
}
sub isRing()
{ my $self = shift;
return $self->{GL_ring} if defined $self->{GL_ring};
my ($first, $last) = $self->points(0, -1);
$self->{GL_ring} = ($first->[0]==$last->[0] && $first->[1]==$last->[1]);
}
sub isFilled() { shift->{GL_fill} }
#----------------
sub in($)
{ my ($self, $projnew) = @_;
return $self if ! defined $projnew || $projnew eq $self->proj;
# projnew can be 'utm'
my ($realproj, @points) = $self->projectOn($projnew, $self->points);
@points ? $self->new(points => \@points, proj => $realproj) : $self;
}
#----------------
sub equal($;$)
{ my $self = shift;
my $other = shift;
return 0 if $self->nrPoints != $other->nrPoints;
$self->Math::Polygon::equal($other->in($self->proj), @_);
}
sub bbox() { shift->Math::Polygon::bbox }
sub area()
{ my $self = shift;
croak "ERROR: area requires a ring of points"
unless $self->isRing;
$self->Math::Polygon::area;
}
sub perimeter()
{ my $self = shift;
croak "ERROR: perimeter requires a ring of points."
unless $self->isRing;
$self->Math::Polygon::perimeter;
}
sub length() { shift->Math::Polygon::perimeter }
sub clip(@)
{ my $self = shift;
my $proj = $self->proj;
my @bbox = @_==1 ? $_[0]->bbox : @_;
$self->isFilled ? $self->fillClip1(@bbox) : $self->lineClip(@bbox);
}
#----------------
sub toString(;$)
{ my ($self, $proj) = @_;
my $line;
if(defined $proj)
( run in 4.937 seconds using v1.01-cache-2.11-cpan-364913b4093 )