Bearing from one coordinate to another

bearing, geolocation, java

Solution

You just have your parentheses `()` in the wrong place.

You are adding degrees to a value in radians, which won't work. `toDegrees()` will do the conversion from radians to degrees for you, then you do the normalisation once you have a value in degrees.

You have:

 Math.toDegrees( (Math.atan2(y, x))+360 ) % 360;

But you need:

( Math.toDegrees(Math.atan2(y, x)) + 360 ) % 360;

Remember also that all inputs to `Math.sin()`, `Math.cos()` and all the other trigonometric functions must be in radians. If your inputs are degrees you'll need to convert them using `Math.toRadians()` first.

Problem

I implemented the "bearing" formula from http://www.movable-type.co.uk/scripts/latlong.html. But it seems highly inaccurate - I suspect some mistakes in my implementation. Could you help me with finding it? My code is below: ``` protected static double bearing(double lat1, double lon1, double lat2, double lon2){ double longDiff= lon2-lon1; double y = Math.sin(longDiff)*Math.cos(lat2); double x = Math.cos(lat1)*Math.sin(lat2)-Math.sin(lat1)*Math.cos(lat2)*Math.cos(longDiff); return Math.toDegrees((Math.atan2(y, x))+360)%360; } ```

Original source