Ticket #6541: heading.patch

File heading.patch, 1.4 KB (added by anonymous, 13 years ago)
  • src/org/openstreetmap/josm/data/coor/LatLon.java

    diff --git a/src/org/openstreetmap/josm/data/coor/LatLon.java b/src/org/openstreetmap/josm/data/coor/LatLon.java
    index 084bc9c..280a7de 100644
    a b public class LatLon extends Coordinate {  
    177177
    178178    /**
    179179     * Returns the heading, in radians, that you have to use to get from
    180      * this lat/lon to another.
     180     * this lat/lon to another. North=0, East=Pi/2
    181181     *
    182182     * @param other the "destination" position
    183183     * @return heading
    184184     */
    185185    public double heading(LatLon other) {
    186         double rv;
    187         if (other.lat() == lat()) {
    188             rv = (other.lon()>lon() ? Math.PI / 2 : Math.PI * 3 / 2);
    189         } else {
    190             rv = Math.atan((other.lon()-lon())/(other.lat()-lat()));
    191             if (rv < 0) {
    192                 rv += Math.PI;
    193             }
    194             if (other.lon() < lon()) {
    195                 rv += Math.PI;
    196             }
     186        double dlon = other.lon() - lon();
     187        double dlat = other.lat() - lat();
     188        if (dlon > 180.0) {
     189            dlon -= 360.0;
     190        }
     191        if (dlon < -180.0) {
     192            dlon += 360.0;
     193        }
     194        double rv = Math.atan2(dlon * cos(Math.toRadians(lat())), dlat);
     195        if (rv < 0.0) {
     196            rv += 2.0 * Math.PI;
    197197        }
    198198        return rv;
    199199    }