Ticket #3526: enhance_gpx_layer_info.diff
File enhance_gpx_layer_info.diff, 6.2 KB (added by , 13 years ago) |
---|
-
gui/layer/GpxLayer.java
329 329 public String getToolTipText() { 330 330 StringBuilder info = new StringBuilder().append("<html>"); 331 331 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 336 332 if (data.attr.containsKey("name")) { 337 333 info.append(tr("Name: {0}", data.attr.get(GpxData.META_NAME))).append("<br>"); 338 334 } … … 342 338 } 343 339 344 340 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>"); 347 347 348 348 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 349 359 for (Collection<WayPoint> seg : trk.trackSegs) { 350 360 for (WayPoint pnt : seg) { 351 if ( first) {361 if (latest == null) { 352 362 latest = earliest = pnt; 353 first = false;354 363 } else { 355 364 if (pnt.compareTo(earliest) < 0) { 356 365 earliest = pnt; … … 360 369 } 361 370 } 362 371 } 363 } 364 365 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))) + " - " 367 376 + 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>"); 371 387 } 388 389 info.append("</table><br><br>"); 390 372 391 } 392 373 393 info.append(tr("Length: ") + new DecimalFormat("#0.00").format(data.length() / 1000) + "km"); 374 394 info.append("<br>"); 375 395 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 376 399 return info.append("</html>").toString(); 377 400 } 378 401 -
io/GpxReader.java
285 285 currentData.tracks.add(currentTrack); 286 286 } else if (qName.equals("name") || qName.equals("cmt") 287 287 || qName.equals("desc") || qName.equals("src") 288 || qName.equals("type") || qName.equals("number")) { 288 || qName.equals("type") || qName.equals("number") 289 || qName.equals("url")) { 289 290 currentTrack.attr.put(qName, accumulator.toString()); 290 291 } 291 292 break; -
data/gpx/GpxTrack.java
9 9 public class GpxTrack extends WithAttributes { 10 10 public Collection<Collection<WayPoint>> trackSegs 11 11 = 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 } 12 33 } -
data/gpx/GpxData.java
118 118 double result = 0.0; // in meters 119 119 WayPoint last = null; 120 120 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 134 124 return result; 135 125 } 136 126 }