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 )