Skip to content

Estimate Distance Between Two Latitude and Longitude Points in Perl

The following Perl script will give you a rough estimation of distance between two points expressed in floating point latitude and longitudes.

### Lat, Long, Lat, Long, Unit (M: Miles, K: KM, N: Nautical Miles) ###
distance(35.4384, 139.6368, 35.4123, 139.6300, "M");

sub distance
{
	my ($lat1, $lon1, $lat2, $lon2, $unit) = @_;
	my $theta = $lon1 - $lon2;
	my $dist = sin(deg2rad($lat1)) * sin(deg2rad($lat2)) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * cos(deg2rad($theta));
	$dist  = acos($dist);
	$dist = rad2deg($dist);
	$dist = $dist * 60 * 1.1515;
	if ($unit eq "K")
	{
		$dist = $dist * 1.609344;
	}
	elsif ($unit eq "N")
	{
		$dist = $dist * 0.8684;
	}
	return ($dist);
}

sub acos
{
	my ($rad) = @_;
	my $ret = atan2(sqrt(1 - $rad**2), $rad);
	return $ret;
}

sub deg2rad
{
	my ($deg) = @_;
	return ($deg * $pi / 180);
}

sub rad2deg
{
	my ($rad) = @_;
	return ($rad * 180 / $pi);
}
Published inTech

Comments are closed.