Ticket #3526: enhance_gpx_layer_info.diff

File enhance_gpx_layer_info.diff, 6.2 KB (added by glebius, 10 years ago)
  • gui/layer/GpxLayer.java

     
    329329    public String getToolTipText() {
    330330        StringBuilder info = new StringBuilder().append("<html>");
    331331
    332         info.append(trn("{0} track, ", "{0} tracks, ", data.tracks.size(), data.tracks.size())).append(
    333                 trn("{0} route, ", "{0} routes, ", data.routes.size(), data.routes.size())).append(
    334                         trn("{0} waypoint", "{0} waypoints", data.waypoints.size(), data.waypoints.size())).append("<br>");
    335 
    336332        if (data.attr.containsKey("name")) {
    337333            info.append(tr("Name: {0}", data.attr.get(GpxData.META_NAME))).append("<br>");
    338334        }
     
    342338        }
    343339
    344340        if (data.tracks.size() > 0) {
    345             boolean first = true;
    346             WayPoint earliest = null, latest = null;
     341            info.append("<table><thead align=\"center\"><tr><td colspan=\"5\">"
     342                + trn("{0} track", "{0} tracks", data.tracks.size(), data.tracks.size())
     343                + "</td></tr><tr><td>" + tr("Name") + "</td><td>"
     344                + tr("Description") + "</td><td>" + tr("Timespan")
     345                + "</td><td>" + tr("Length") + "</td><td>" + tr("URL")
     346                + "</td></tr></thead>");
    347347
    348348            for (GpxTrack trk : data.tracks) {
     349                WayPoint earliest = null, latest = null;
     350
     351                info.append("<tr><td>");
     352                if (trk.attr.containsKey("name"))
     353                    info.append(trk.attr.get("name"));
     354                info.append("</td><td>");
     355                if (trk.attr.containsKey("desc"))
     356                    info.append(" ").append(trk.attr.get("desc"));
     357                info.append("</td><td>");
     358
    349359                for (Collection<WayPoint> seg : trk.trackSegs) {
    350360                    for (WayPoint pnt : seg) {
    351                         if (first) {
     361                        if (latest == null) {
    352362                            latest = earliest = pnt;
    353                             first = false;
    354363                        } else {
    355364                            if (pnt.compareTo(earliest) < 0) {
    356365                                earliest = pnt;
     
    360369                        }
    361370                    }
    362371                }
    363             }
    364             if (earliest != null && latest != null) {
    365                 DateFormat df = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.SHORT);
    366                 info.append(tr("Timespan: ") + df.format(new Date((long) (earliest.time * 1000))) + " - "
     372
     373                if (earliest != null && latest != null) {
     374                    DateFormat df = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.SHORT);
     375                    info.append(df.format(new Date((long) (earliest.time * 1000))) + " - "
    367376                        + df.format(new Date((long) (latest.time * 1000))));
    368                 int diff = (int) (latest.time - earliest.time);
    369                 info.append(" (" + (diff / 3600) + ":" + ((diff % 3600) / 60) + ")");
    370                 info.append("<br>");
     377                    int diff = (int) (latest.time - earliest.time);
     378                    info.append(" (" + (diff / 3600) + ":" + ((diff % 3600) / 60) + ")");
     379                }
     380
     381                info.append("</td><td>");
     382                info.append(new DecimalFormat("#0.00").format(trk.length() / 1000) + "km");
     383                info.append("</td><td>");
     384                if (trk.attr.containsKey("url"))
     385                    info.append(trk.attr.get("url"));
     386                info.append("</td></tr>");
    371387            }
     388
     389            info.append("</table><br><br>");
     390
    372391        }
     392
    373393        info.append(tr("Length: ") + new DecimalFormat("#0.00").format(data.length() / 1000) + "km");
    374394        info.append("<br>");
    375395
     396        info.append(trn("{0} route, ", "{0} routes, ", data.routes.size(), data.routes.size())).append(
     397                        trn("{0} waypoint", "{0} waypoints", data.waypoints.size(), data.waypoints.size())).append("<br>");
     398
    376399        return info.append("</html>").toString();
    377400    }
    378401
  • io/GpxReader.java

     
    285285                    currentData.tracks.add(currentTrack);
    286286                } else if (qName.equals("name") || qName.equals("cmt")
    287287                        || qName.equals("desc") || qName.equals("src")
    288                         || qName.equals("type") || qName.equals("number")) {
     288                        || qName.equals("type") || qName.equals("number")
     289                        || qName.equals("url")) {
    289290                    currentTrack.attr.put(qName, accumulator.toString());
    290291                }
    291292                break;
  • data/gpx/GpxTrack.java

     
    99public class GpxTrack extends WithAttributes {
    1010    public Collection<Collection<WayPoint>> trackSegs
    1111        = new LinkedList<Collection<WayPoint>>();
     12
     13    /**
     14     * calculates the length of the track
     15     */
     16    public double length(){
     17        double result = 0.0; // in meters
     18        WayPoint last = null;
     19
     20        for (Collection<WayPoint> trkseg : trackSegs) {
     21            for (WayPoint tpt : trkseg) {
     22                if(last != null){
     23                    Double d = last.getCoor().greatCircleDistance(tpt.getCoor());
     24                    if(!d.isNaN() && !d.isInfinite())
     25                        result += d;
     26                }
     27                last = tpt;
     28            }
     29            last = null; // restart for each track segment
     30        }
     31        return result;
     32    }
    1233}
  • data/gpx/GpxData.java

     
    118118        double result = 0.0; // in meters
    119119        WayPoint last = null;
    120120
    121         for (GpxTrack trk : tracks) {
    122             for (Collection<WayPoint> trkseg : trk.trackSegs) {
    123                 for (WayPoint tpt : trkseg) {
    124                     if(last != null){
    125                         Double d = last.getCoor().greatCircleDistance(tpt.getCoor());
    126                         if(!d.isNaN() && !d.isInfinite())
    127                           result += d;
    128                     }
    129                     last = tpt;
    130                 }
    131                 last = null; // restart for each track segment
    132             }
    133         }
     121        for (GpxTrack trk : tracks)
     122            result += trk.length();
     123
    134124        return result;
    135125    }
    136126}