Location\Bearing\BearingSpherical::calculateDestination PHP Method

calculateDestination() public method

Calculates a destination point for the given point, bearing angle, and distance.
public calculateDestination ( Coordinate $point, float $bearing, float $distance ) : Coordinate
$point Location\Coordinate
$bearing float the bearing angle between 0 and 360 degrees
$distance float the distance to the destination point in meters
return Location\Coordinate
    public function calculateDestination(Coordinate $point, $bearing, $distance)
    {
        $D = $distance / static::EARTH_RADIUS;
        $B = deg2rad($bearing);
        $φ = deg2rad($point->getLat());
        $λ = deg2rad($point->getLng());
        $Φ = asin(sin($φ) * cos($D) + cos($φ) * sin($D) * cos($B));
        $Λ = $λ + atan2(sin($B) * sin($D) * cos($φ), cos($D) - sin($φ) * sin($φ));
        return new Coordinate(rad2deg($Φ), rad2deg($Λ));
    }

Usage Example

 public function testIfCalculateDestinationSouthernWorksAsExpected()
 {
     $bearingCalculator = new BearingSpherical();
     $point = new Coordinate(0, 0);
     $destination = $bearingCalculator->calculateDestination($point, 180, 111195.0837);
     // 1 degree in longitude at the equator:
     // 2πr/360 = 40030230.1407 meters/360 = 111195.0837 meters
     $this->assertEquals(-1.0, $destination->getLat(), '', 0.0001);
     $this->assertEquals(0.0, $destination->getLng(), '', 0.0001);
 }