public static LatLng translatePoint(LatLng point,double distance,double bearing){
  distance=distance / 1000d;
  double lat=Math.toRadians(point.latitude);
  double lng=Math.toRadians(point.longitude);
  bearing=Math.toRadians(bearing);
  double Lat2=Math.asin((Math.sin(lat) * Math.cos(distance / EARTH)) + (Math.cos(lat) * Math.sin(distance / EARTH) * Math.cos(bearing)));
  double Long2=lng + Math.atan2(Math.sin(bearing) * Math.sin(distance / EARTH) * Math.cos(lat),Math.cos(distance / EARTH) - (Math.sin(lat) * Math.sin(Lat2)));
  Lat2=Math.toDegrees(Lat2);
  Long2=Math.toDegrees(Long2);
  return new LatLng(Lat2,Long2);
}

public static LatLng translatePoint ( LatLng point , double distance , double bearing ) { distance = distance / 1000d ; double lat = Math . toRadians ( point . latitude ) ; double lng = Math . toRadians ( point . longitude ) ; bearing = Math . toRadians ( bearing ) ; double Lat2 = Math . asin ( ( Math . sin ( lat ) * Math . cos ( distance / EARTH ) ) + ( Math . cos ( lat ) * Math . sin ( distance / EARTH ) * Math . cos ( bearing ) ) ) ; double Long2 = lng + Math . atan2 ( Math . sin ( bearing ) * Math . sin ( distance / EARTH ) * Math . cos ( lat ) , Math . cos ( distance / EARTH ) - ( Math . sin ( lat ) * Math . sin ( Lat2 ) ) ) ; Lat2 = Math . toDegrees ( Lat2 ) ; Long2 = Math . toDegrees ( Long2 ) ; return new LatLng ( Lat2 , Long2 ) ; }
returns the destination point from the starting point point having travelled the given distance on the given initial bearing ( bearing normally varies around path followed ) .
