Changeset 26542 in osm


Ignore:
Timestamp:
2011-08-14T19:53:04+02:00 (13 years ago)
Author:
glebius
Message:
  • Track estimate position error in LiveGpsAcquirer and pass this info up to LiveGpsData.
  • In LiveGpsLayer draw nice cyan oval displaying estimate position error.
  • Cut some dead code and parameters on my way.
Location:
applications/editors/josm/plugins/livegps/src/livegps
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/livegps/src/livegps/LiveGpsAcquirer.java

    r25833 r26542  
    265265        float speed = 0;
    266266        float course = 0;
     267        float epx = 0;
     268        float epy = 0;
    267269
    268270        try {
     
    281283            speed = (new Float(report.getDouble("speed"))).floatValue();
    282284            course = (new Float(report.getDouble("track"))).floatValue();
    283 
    284             return new LiveGpsData(lat, lon, course, speed, true);
     285            epx = (new Float(report.getDouble("epx"))).floatValue();
     286            epy = (new Float(report.getDouble("epy"))).floatValue();
     287
     288            return new LiveGpsData(lat, lon, course, speed, epx, epy);
    285289        } catch (JSONException je) {}
    286290
     
    318322                        course = Float.parseFloat(status[8]);
    319323                    } catch (NumberFormatException nex) {}
    320                     return new LiveGpsData(lat, lon, course, speed, true);
     324                    return new LiveGpsData(lat, lon, course, speed);
    321325                }
    322326                break;
     
    329333                    speed = Float.NaN;
    330334                    course = Float.NaN;
    331                     return new LiveGpsData(lat, lon, course, speed, true);
     335                    return new LiveGpsData(lat, lon, course, speed);
    332336                }
    333337                break;
  • applications/editors/josm/plugins/livegps/src/livegps/LiveGpsData.java

    r26218 r26542  
    1818 */
    1919public class LiveGpsData {
     20    private boolean fix;
    2021    private LatLon latLon;
    2122    private float course;
    2223    private float speed;
    23     private boolean fix;
     24    private float epx, epy;
    2425    private String wayString;
    2526    private Way way;
     
    3233     * @param haveFix
    3334     */
    34     public LiveGpsData(double latitude, double longitude, float course, float speed, boolean haveFix) {
     35    public LiveGpsData(double latitude, double longitude, float course, float speed) {
    3536        super();
     37        this.fix = true;
    3638        this.latLon = new LatLon(latitude, longitude);
    3739        this.course = course;
    3840        this.speed = speed;
    39         this.fix = haveFix;
    40     }
    41     /**
    42      *
    43      */
    44     public LiveGpsData() {
    45         // TODO Auto-generated constructor stub
    46     }
     41    }
     42    /**
     43     * @param latitude
     44     * @param longitude
     45     * @param course
     46     * @param speed
     47     * @param haveFix
     48     * @param epx
     49     * @param epy
     50     */
     51    public LiveGpsData(double latitude, double longitude, float course, float speed, float epx, float epy) {
     52        super();
     53        this.fix = true;
     54        this.latLon = new LatLon(latitude, longitude);
     55        this.course = course;
     56        this.speed = speed;
     57        this.epx = epx;
     58        this.epy = epy;
     59    }
     60
    4761    /**
    4862     * @return the course
     
    106120    public void setLatLon(LatLon latLon) {
    107121        this.latLon = latLon;
     122    }
     123
     124    public void setEpy(float epy) {
     125        this.epy = epy;
     126    }
     127
     128    public void setEpx(float epx) {
     129        this.epx = epx;
     130    }
     131
     132    public float getEpy() {
     133        return this.epy;
     134    }
     135
     136    public float getEpx() {
     137        return this.epx;
    108138    }
    109139
  • applications/editors/josm/plugins/livegps/src/livegps/LiveGpsLayer.java

    r26541 r26542  
    2626public class LiveGpsLayer extends GpxLayer implements PropertyChangeListener {
    2727    public static final String LAYER_NAME = tr("LiveGPS layer");
    28     public static final String KEY_LIVEGPS_COLOR = "color.livegps.position";
     28    public static final String C_LIVEGPS_COLOR_POSITION = "color.livegps.position";
     29    public static final String C_LIVEGPS_COLOR_POSITION_ESTIMATE = "color.livegps.position_estimate";
    2930
    3031    private static final int DEFAULT_REFRESH_INTERVAL = 250;
     
    4344    private long lastCenter = 0;
    4445
     46    LiveGpsData lastData;
    4547    LatLon lastPos;
    4648    WayPoint lastPoint;
    4749    private final AppendableGpxTrackSegment trackSegment;
    48     float speed;
    49     float course;
    5050    boolean autocenter;
    5151    private SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS");
     
    9999    }
    100100
    101     // void setStatus(String status)
    102     // {
    103     // this.status = status;
    104     // Main.map.repaint();
    105     // System.out.println("LiveGps status: " + status);
    106     // }
    107 
    108     void setSpeed(float metresPerSecond) {
    109         speed = metresPerSecond;
    110     }
    111 
    112     void setCourse(float degrees) {
    113         course = degrees;
    114     }
    115 
    116101    public void setAutoCenter(boolean ac) {
    117102        autocenter = ac;
     
    126111
    127112        Point screen = mv.getPoint(lastPoint.getCoor());
    128         g.setColor(Main.pref.getColor(KEY_LIVEGPS_COLOR, Color.RED));
     113        g.setColor(Main.pref.getColor(C_LIVEGPS_COLOR_POSITION, Color.RED));
    129114
    130115        int TriaHeight = Main.pref.getInteger(C_CURSOR_H, 20);
     
    133118        int[] x = new int[4];
    134119        int[] y = new int[4];
     120        float course = lastData.getCourse();
    135121
    136122        x[0] = screen.x + Math.round(TriaHeight * (float )Math.sin(Math.toRadians(course)));
     
    144130
    145131        g.drawPolygon(x, y, 4);
     132
     133        g.setColor(Main.pref.getColor(C_LIVEGPS_COLOR_POSITION_ESTIMATE, Color.CYAN));
     134
     135        int w, h;
     136        double ppm = 100 / mv.getDist100Pixel();        /* pixels per metre */
     137
     138        w = (int )Math.round(lastData.getEpx() * ppm);
     139        h = (int )Math.round(lastData.getEpy() * ppm);
     140
     141        if (w > TriaWidth || h > TriaWidth) {
     142                int xo, yo;
     143
     144                yo = screen.y - Math.round(h/2);
     145                xo = screen.x - Math.round(w/2);
     146
     147                g.drawOval(xo, yo, w, h);
     148        }
    146149    }
    147150
     
    154157        }
    155158        if ("gpsdata".equals(evt.getPropertyName())) {
    156             LiveGpsData data = (LiveGpsData) evt.getNewValue();
    157             if (data.isFix()) {
    158                 setCurrentPosition(data.getLatitude(), data.getLongitude());
    159                 if (!Float.isNaN(data.getSpeed())) {
    160                     setSpeed(data.getSpeed());
    161                 }
    162                 if (!Float.isNaN(data.getCourse())) {
    163                     setCourse(data.getCourse());
    164                 }
     159            lastData = (LiveGpsData) evt.getNewValue();
     160            if (lastData.isFix()) {
     161                setCurrentPosition(lastData.getLatitude(), lastData.getLongitude());
    165162                if (allowRedraw())
    166163                    Main.map.repaint();
Note: See TracChangeset for help on using the changeset viewer.