Geo-DNA
view release on metacpan or search on metacpan
lib/Geo/DNA.pm view on Meta::CPAN
cos( $distance / $RADIUS_OF_EARTH ) - sin( $lat1 ) * sin( $lat2 ));
return encode( $lat2, $lon2, precision => $precision, radians => 1 );
}
sub distance_in_km {
my ( $ga, $gb ) = @_;
my ( $alat, $alon ) = decode( $ga );
my ( $blat, $blon ) = decode( $gb );
# if a[1] and b[1] have different signs, we need to translate
# everything a bit in order for the formulae to work.
if ( $alon * $blon < 0.0 && abs( $alon - $blon ) > 180.0 ) {
( $alat, $alon ) = add_vector( $ga, 0.0, 180.0 );
( $blat, $blon ) = add_vector( $gb, 0.0, 180.0 );
}
my $x = ( deg2rad( $blon ) - deg2rad( $alon ) ) * cos( ( deg2rad( $alat ) + deg2rad( $blat ) ) / 2 );
my $y = ( deg2rad( $blat ) - deg2rad( $alat ) );
my $d = sqrt( $x * $x + $y * $y ) * $RADIUS_OF_EARTH;
return $d / 1000;
}
( run in 0.608 second using v1.01-cache-2.11-cpan-26ccb49234f )