| GIS-Distance documentation | Contained in the GIS-Distance distribution. |
GIS::Distance::Formula::GreatCircle - Great circle distance calculations. (BROKEN)
A true Great Circle Distance calculation. This was created because the GIS::Distance::MathTrig calculation uses Math::Trig's great_circle_distance() which doesn't actually appear to use the actual Great Circle Distance formula.
Normally this module is not used directly. Instead GIS::Distance is used which in turn interfaces with the various formula classes.
As documented in more detail at the BUGS section of GIS::Distance, the distances returned by this module seem to be invalid. Don't use this module unless you want to help fix it.
c = 2 * asin( sqrt(
( sin(( lat1 - lat2 )/2) )^2 +
cos( lat1 ) * cos( lat2 ) *
( sin(( lon1 - lon2 )/2) )^2
) )
This method is called by GIS::Distance's distance() method.
GIS::Distanc
Aran Clary Deltac <bluefeet@cpan.org>
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::GreatCircle;
use Any::Moose; use namespace::autoclean; with 'GIS::Distance::Formula'; use Class::Measure::Length qw( length ); use Math::Trig qw( deg2rad asin );
sub distance { my($self,$lat1,$lon1,$lat2,$lon2) = @_; $lon1 = deg2rad($lon1); $lat1 = deg2rad($lat1); $lon2 = deg2rad($lon2); $lat2 = deg2rad($lat2); my $c = 2*asin( sqrt( ( sin(($lat1-$lat2)/2) )^2 + cos($lat1) * cos($lat2) * ( sin(($lon1-$lon2)/2) )^2 ) ); return length( $self->kilometer_rho() * $c, 'km' ); } __PACKAGE__->meta->make_immutable; 1; __END__