public calculateBearing ( |
||
$point1 | ||
$point2 | ||
return | float | Bearing Angle |
public function calculateBearing(Coordinate $point1, Coordinate $point2)
{
$lat1 = deg2rad($point1->getLat());
$lat2 = deg2rad($point2->getLat());
$lng1 = deg2rad($point1->getLng());
$lng2 = deg2rad($point2->getLng());
$y = sin($lng2 - $lng1) * cos($lat2);
$x = cos($lat1) * sin($lat2) - sin($lat1) * cos($lat2) * cos($lng2 - $lng1);
$bearing = rad2deg(atan2($y, $x));
if ($bearing < 0) {
$bearing = fmod($bearing + 360, 360);
}
return $bearing;
}
public function testIfCalculateBearingSouthWesternWorksAsExpected() { $point1 = new Coordinate(0, 0); $point2 = new Coordinate(-0.1, -0.1); $bearingCalculator = new BearingSpherical(); $this->assertEquals(225.0, $bearingCalculator->calculateBearing($point1, $point2), '', 0.1); }