Расчеты выполняются на радианах, поэтому сначала вам нужно преобразовать значения, основанные на градусах, а затем обратно для получения значимого значения для вас. Например:
public static function findDestination(array $startingCoordinates, $bearing, $distance) {
$startingCoordinates['lat'] = deg2rad((float)$startingCoordinates['lat']);
$startingCoordinates['lon'] = deg2rad((float)$startingCoordinates['lon']);
$bearing = deg2rad($bearing);
$angularDistance = $distance / Maps_EARTH_RADIUS;
$lat = asin(
sin($startingCoordinates['lat']) * cos( $angularDistance) +
cos($startingCoordinates['lat']) * sin( $angularDistance) * cos($bearing)
);
return array(
'lat' => rad2deg($lat),
'lon' => rad2deg($startingCoordinates['lon'] + atan2(
sin($bearing ) * sin($angularDistance ) * cos($startingCoordinates['lat']),
cos($angularDistance) - sin($startingCoordinates['lat'] ) * sin($lat)
))
);
}
Тестирование с findDestination(array('lat' => 40.7142691, 'lon' => -74.0059729), 90, 1000)
дает результат 40.714268492616,-73.994108059287
, который, я думаю, больше похож на то, что вы ищете.