Ticket #18012: create-trackseg-names-from-gpxLayerName-if-there-is-no-name-attribute-attached.patch
File create-trackseg-names-from-gpxLayerName-if-there-is-no-name-attribute-attached.patch, 4.7 KB (added by , 5 years ago) |
---|
-
src/org/openstreetmap/josm/actions/relation/ExportRelationToGpxAction.java
165 165 .filter(relsFound::contains) 166 166 .findFirst() 167 167 .ifPresent(r -> { 168 trkAttr.put("name", r.getName() != null ? r.getName() : r.getId());168 trkAttr.put("name", r.getName() != null ? r.getName() : Long.toString(r.getId())); 169 169 trkAttr.put("desc", tr("based on osm route relation data, timestamps are synthetic")); 170 170 }); 171 GpxData.ensureUniqueName(trkAttr, names );171 GpxData.ensureUniqueName(trkAttr, names, (String) trkAttr.get("name")); 172 172 } 173 173 List<Node> ln = flat.get(i).getWay().getNodes(); 174 174 if (wayConnectionType.direction == WayConnectionType.Direction.BACKWARD) -
src/org/openstreetmap/josm/data/gpx/GpxData.java
441 441 * 442 442 * @since 13210 443 443 */ 444 public static String ensureUniqueName(Map<String, Object> attrs, Map<String, Integer> counts ) {445 String name = attrs.getOrDefault("name", "GPX split result").toString();444 public static String ensureUniqueName(Map<String, Object> attrs, Map<String, Integer> counts, String srcLayerName) { 445 String name = attrs.getOrDefault("name", srcLayerName).toString().replaceFirst(" #\\d+$", ""); 446 446 Integer count = counts.getOrDefault(name, 0) + 1; 447 447 counts.put(name, count); 448 448 449 attrs.put("name", MessageFormat.format("{0}{1}", name, (count > 1) ? " #"+count : ""));449 attrs.put("name", MessageFormat.format("{0}{1}", name, " #" + count)); 450 450 return attrs.get("name").toString(); 451 451 } 452 452 … … 456 456 * 457 457 * @since 13210 458 458 */ 459 public synchronized void splitTrackSegmentsToTracks( ) {459 public synchronized void splitTrackSegmentsToTracks(String srcLayerName) { 460 460 final HashMap<String, Integer> counts = new HashMap<>(); 461 461 462 462 List<GpxTrack> trks = getTracks().stream() 463 463 .flatMap(trk -> trk.getSegments().stream().map(seg -> { 464 464 HashMap<String, Object> attrs = new HashMap<>(trk.getAttributes()); 465 ensureUniqueName(attrs, counts );465 ensureUniqueName(attrs, counts, srcLayerName); 466 466 return new ImmutableGpxTrack(Arrays.asList(seg), attrs); 467 467 })) 468 468 .collect(Collectors.toCollection(ArrayList<GpxTrack>::new)); … … 480 480 * 481 481 * @since 13210 482 482 */ 483 public synchronized void splitTracksToLayers( ) {483 public synchronized void splitTracksToLayers(String srcLayerName) { 484 484 final HashMap<String, Integer> counts = new HashMap<>(); 485 485 486 486 getTracks().stream() … … 489 489 HashMap<String, Object> attrs = new HashMap<>(trk.getAttributes()); 490 490 GpxData d = new GpxData(); 491 491 d.addTrack(trk); 492 return new GpxLayer(d, ensureUniqueName(attrs, counts ));492 return new GpxLayer(d, ensureUniqueName(attrs, counts, srcLayerName)); 493 493 }) 494 494 .forEachOrdered(layer -> MainApplication.getLayerManager().addLayer(layer)); 495 495 } … … 706 706 * Warning: there are lot of track with broken timestamps, 707 707 * so we just ingore points from future and from year before 1970 in this method 708 708 * works correctly @since 5815 709 709 * @return minimum and maximum dates in array of 2 elements 710 710 */ 711 711 public synchronized Date[] getMinMaxTimeForAllTracks() { 712 712 long now = System.currentTimeMillis(); -
src/org/openstreetmap/josm/gui/layer/GpxLayer.java
426 426 427 427 @Override 428 428 public void actionPerformed(ActionEvent e) { 429 layer.data.splitTrackSegmentsToTracks( );429 layer.data.splitTrackSegmentsToTracks(layer.getName().length()>0 ? layer.getName() : "GPX split result"); 430 430 layer.invalidate(); 431 431 } 432 432 … … 459 459 460 460 @Override 461 461 public void actionPerformed(ActionEvent e) { 462 layer.data.splitTracksToLayers( );462 layer.data.splitTracksToLayers(layer.getName().length()>0 ? layer.getName() : "GPX split result"); 463 463 // layer is not modified by this action 464 464 } 465 465