public static LatLong destinationPoint(LatLong start, double distance, float bearing) {
        double theta = Math.toRadians(bearing);
        double delta = distance / EQUATORIAL_RADIUS; // angular distance in radians

        double phi1 = Math.toRadians(start.latitude);
        double lambda1 = Math.toRadians(start.longitude);

        double phi2 = Math.asin(Math.sin(phi1) * Math.cos(delta)
                + Math.cos(phi1) * Math.sin(delta) * Math.cos(theta));
        double lambda2 = lambda1 + Math.atan2(Math.sin(theta) * Math.sin(delta) * Math.cos(phi1),
                Math.cos(delta) - Math.sin(phi1) * Math.sin(phi2));

        return new LatLong(Math.toDegrees(phi2), Math.toDegrees(lambda2));
    }
@Test
    public void destinationPointTest() {
        LatLong start = new LatLong(45, 45);
        LatLong expected = new LatLong(45.006352, 45.008984);
        LatLong actual = start.destinationPoint(1000, 45);
        Assert.assertEquals(LatLongUtils.degreesToMicrodegrees(expected.latitude), LatLongUtils.degreesToMicrodegrees(actual.latitude), 0);
        Assert.assertEquals(LatLongUtils.degreesToMicrodegrees(expected.longitude), LatLongUtils.degreesToMicrodegrees(actual.longitude), 0);
    }