GIS::Distance::Formula::Cosine - Cosine distance calculations.


GIS-Distance documentation Contained in the GIS-Distance distribution.

Index


Code Index:

NAME

Top

GIS::Distance::Formula::Cosine - Cosine distance calculations.

DESCRIPTION

Top

Although this formula is mathematically exact, it is unreliable for small distances because the inverse cosine is ill-conditioned.

Normally this module is not used directly. Instead GIS::Distance is used which in turn interfaces with the various formula classes.

FORMULA

Top

  a = sin(lat1) * sin(lat2)
  b = cos(lat1) * cos(lat2) * cos(lon2 - lon1)
  c = arccos(a + b)
  d = R * c

METHODS

Top

distance

This method is called by GIS::Distance's distance() method.

SEE ALSO

Top

GIS::Distanc

GIS::Distance::Formula::Cosine::Fast

AUTHOR

Top

Aran Clary Deltac <bluefeet@cpan.org>

LICENSE

Top

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.


GIS-Distance documentation Contained in the GIS-Distance distribution.
package GIS::Distance::Formula::Cosine;

use Any::Moose;
use namespace::autoclean;

with 'GIS::Distance::Formula';

use Class::Measure::Length qw( length );
use Math::Trig qw( deg2rad acos );

sub distance {
    my($self,$lat1,$lon1,$lat2,$lon2) = @_;
    $lon1 = deg2rad($lon1); $lat1 = deg2rad($lat1);
    $lon2 = deg2rad($lon2); $lat2 = deg2rad($lat2);

    my $a = sin($lat1) * sin($lat2);
    my $b = cos($lat1) * cos($lat2) * cos($lon2 - $lon1);
    my $c = acos($a + $b);

    return length( $self->kilometer_rho() * $c, 'km' );
}

__PACKAGE__->meta->make_immutable;

1;
__END__