<?php
//public static int getDirection(double lat1_, double lon1_, double lat2_, double lon2_)
//{
//	final double PI = 3.141592653589793;
//	double lonDiff = lon2_ - lon1_;
//	double latDiff = lat2_ - lat1_;
//	double azimuth = (PI * 0.5f) - Math.atan(latDiff / lonDiff);
//	if (lonDiff > 0)
//	{
//		double direction = rad2deg(azimuth);
//		if (direction < 0)
//			direction = 360 - direction;
//		return (int)direction;
//	}
//	else if (lonDiff < 0)
//	{
//		double direction = rad2deg(azimuth + PI);
//		if (direction < 0)
//			direction = 360 - direction;
//		return (int)direction;
//	}
//	else if (latDiff < 0)
//	{
//		double direction = rad2deg(PI);
//		if (direction < 0)
//			direction = 360 - direction;
//		return (int)direction;
//	}
//	return 0;
//}
function getDirection($lat1_, $lon1_, $lat2_, $lon2_)
{
	$pi = "3.141592653589793";
	$londiff = $lon2_ - $lon1;
	$latdiff = $lat2_ - $lat1;
	
	$azimuth = ($pi * 0.5) - atan($latdiff / $londiff);
	if ($londiff > 0)
	{
		$direction = rad2deg($azimuth);
		if ($direction < 0)
			$direction = 360 - $direction;
		return $direction;
	}
	else if ($londiff < 0)
	{
		$direction = rad2deg($azimuth + $pi);
		if ($direction < 0)
			$direction = 360 - $direction;
		return $direction;
	}
	else if ($latdiff < 0)
	{
		$direction = rad2deg($pi);
		if ($direction < 0)
			$direction = 360 - $direction;
		return $direction;
	}
	return 0;
}

function getDirection2($lat1_, $lon1_, $lat2_, $lon2_)
{
	$pi = "3.141592653589793";
	$y = cos($lon2_ * $pi / 180) * sin($lat2_ * $pi / 180 - $lat1_ * $pi / 180);
	$x = cos($lon1_ * $pi / 180) * sin($lon2_ * $pi / 180) - sin($lon1_ * $pi / 180) * cos($lon2_ * $pi / 180) * cos($lat2_ * $pi / 180 - $lat1_ * $pi / 180);
	$dirE0 = 180 * atan2($y, $x) / $pi;
	if ($dirE0 < 0)
		$dirE0 = $dirE0 + 360;
	$dirN0 = ($dirE0 + 90) % 360;
	return $dirN0;
}

$dirc = getDirection(36.90711224, 139.93543065, 36.90701913, 139.93548388);

$dirc2 = getDirection2(36.90701913, 139.93548388, 36.90711224, 139.93543065);

print $dirc. "<br />";

print $dirc2. "<br />";
?>
