Quick actions

cmd+k|ctrl+k

Navigation

Languages

GeoPoint Final (PP)

Snippet info

Language

Perl

Visibility

public

Author

zostay

Created

2016-07-09T03:22:31Z

Updated

2016-07-09T03:22:31Z

use v5.24;
use warnings;
package GeoPoint;

use overload '""' => \&gist;

sub Longitude {
    my ($lon) = @_;
    die "Not a valid longitude"
        unless $lon >= -180 and $lon <= 180;
    return $lon;
}

sub Latitude {
    my ($lat) = @_;
    die "Not a valid latitude"
        unless $lat >= -90 and $lat <= 90;
    return $lat;
}

sub new {
    my ($class, %o) = @_;
    my $lat = Latitude($o{lat});
    my $lon = Longitude($o{lon});
    bless { lat => $lat, lon => $lon }, $class;
}

sub lat {
    my $self = shift;
    if (@_) { $self->{lat} = shift }
    return $self->{lat};
}

sub lon {
    my $self = shift;
    if (@_) { $self->{lon} = shift }
    return $self->{lon};
}

sub gist {
    my $self = shift;
    return
        ($self->{lat} >= 0 ? "N$self->{lat}" : "S" . -$self->{lat}) . " " .
        ($self->{lon} >= 0 ? "E$self->{lon}" : "W" . -$self->{lon})
}

my $geo = GeoPoint->new(lat => 39.1915045, lon => -96.6070506);
say $geo->lat; # 39.1915045
say $geo->lon; # -96.6070506
say $geo;     # N39.1915045 W96.6070506
INFO