Changeset 9796 in josm for trunk/src/org/openstreetmap/josm


Ignore:
Timestamp:
2016-02-14T15:12:10+01:00 (8 years ago)
Author:
bastiK
Message:

applied #12524 - heading calculation reversed longitudes (patch by kolesar)

Location:
trunk/src/org/openstreetmap/josm
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/data/coor/LatLon.java

    r9558 r9796  
    327327
    328328    /**
    329      * Returns the heading, in radians, that you have to use to get from this lat/lon to another.
     329     * Returns the heading that you have to use to get from this lat/lon to another.
     330     *
     331     * Angle starts from north and increases counterclockwise (!), PI/2 means west.
     332     * You can get usual clockwise angle from {@link #bearing(LatLon)} method.
     333     * This method is kept as deprecated because it is called from many plugins.
    330334     *
    331335     * (I don't know the original source of this formula, but see
     
    333337     * for some hints how it is derived.)
    334338     *
     339     * @deprecated see bearing method
    335340     * @param other the "destination" position
    336      * @return heading in the range 0 <= hd < 2*PI
    337      */
     341     * @return heading in radians in the range 0 <= hd < 2*PI
     342     */
     343    @Deprecated
    338344    public double heading(LatLon other) {
    339345        double hd = atan2(sin(toRadians(this.lon() - other.lon())) * cos(toRadians(other.lat())),
     
    348354
    349355    /**
     356     * Returns bearing from this point to another.
     357     *
     358     * Angle starts from north and increases clockwise, PI/2 means east.
     359     * Old deprecated method {@link #heading(LatLon)} used unusual reverse angle.
     360     *
     361     * Please note that reverse bearing (from other point to this point) should NOT be
     362     * calculated from return value of this method, because great circle path
     363     * between the two points have different bearings at each position.
     364     *
     365     * To get bearing from another point to this point call other.bearing(this)
     366     *
     367     * @param other the "destination" position
     368     * @return heading in radians in the range 0 <= hd < 2*PI
     369     */
     370    public double bearing(LatLon other) {
     371        double lat1 = toRadians(this.lat());
     372        double lat2 = toRadians(other.lat());
     373        double dlon = toRadians(other.lon() - this.lon());
     374        double bearing = atan2(
     375            sin(dlon) * cos(lat2),
     376            cos(lat1) * sin(lat2) - sin(lat1) * cos(lat2) * cos(dlon)
     377        );
     378        bearing %= 2 * PI;
     379        if (bearing < 0) {
     380            bearing += 2 * PI;
     381        }
     382        return bearing;
     383    }
     384
     385    /**
    350386     * Returns this lat/lon pair in human-readable format.
    351387     *
  • trunk/src/org/openstreetmap/josm/gui/layer/gpx/GpxDrawHelper.java

    r9395 r9796  
    8989    private static final int sl9 = 3;
    9090    private static final int[][] dir = {
    91         {+sl4, +ll0, +ll0, +sl4}, {-sl9, +ll0, +sl9, +ll0}, {-ll0, +sl4, -sl4, +ll0},
    92         {-ll0, -sl9, -ll0, +sl9}, {-sl4, -ll0, -ll0, -sl4}, {+sl9, -ll0, -sl9, -ll0},
    93         {+ll0, -sl4, +sl4, -ll0}, {+ll0, +sl9, +ll0, -sl9}, {+sl4, +ll0, +ll0, +sl4},
    94         {-sl9, +ll0, +sl9, +ll0}, {-ll0, +sl4, -sl4, +ll0}, {-ll0, -sl9, -ll0, +sl9}};
     91        {+sl4, +ll0, +ll0, +sl4}, {-sl9, +ll0, +sl9, +ll0},
     92        {-ll0, +sl4, -sl4, +ll0}, {-ll0, -sl9, -ll0, +sl9},
     93        {-sl4, -ll0, -ll0, -sl4}, {+sl9, -ll0, -sl9, -ll0},
     94        {+ll0, -sl4, +sl4, -ll0}, {+ll0, +sl9, +ll0, -sl9}
     95    };
    9596
    9697    private void setupColors() {
     
    333334                        break;
    334335                    case DIRECTION:
    335                         double dirColor = oldWp.getCoor().heading(trkPnt.getCoor());
     336                        double dirColor = oldWp.getCoor().bearing(trkPnt.getCoor());
    336337                        color = directionScale.getColor(dirColor);
    337338                        break;
     
    348349                    if (!noDraw && (maxLineLength == -1 || dist <= maxLineLength)) {
    349350                        trkPnt.drawLine = true;
    350                         trkPnt.dir = (int) oldWp.getCoor().heading(trkPnt.getCoor());
     351                        double bearing = oldWp.getCoor().bearing(trkPnt.getCoor());
     352                        trkPnt.dir = ((int) (bearing / Math.PI * 4 + 1.5)) % 8;
    351353                    } else {
    352354                        trkPnt.drawLine = false;
  • trunk/src/org/openstreetmap/josm/tools/ColorScale.java

    r8512 r9796  
    4545        for (int i = 0; i < sc.colors.length; i++) {
    4646
    47             float angle = 4 - i / 256f * 4;
     47            float angle = i / 256f * 4;
    4848            int quadrant = (int) angle;
    4949            angle -= quadrant;
Note: See TracChangeset for help on using the changeset viewer.