Ticket #18434: 18434.patch
File 18434.patch, 12.5 KB (added by , 4 years ago) |
---|
-
src/org/openstreetmap/josm/data/gpx/GpxData.java
22 22 import java.util.stream.Stream; 23 23 24 24 import org.openstreetmap.josm.data.Bounds; 25 import org.openstreetmap.josm.data.Data;26 25 import org.openstreetmap.josm.data.DataSource; 27 26 import org.openstreetmap.josm.data.coor.EastNorth; 28 27 import org.openstreetmap.josm.data.gpx.IGpxTrack.GpxTrackChangeListener; 28 import org.openstreetmap.josm.data.osm.OsmData; 29 29 import org.openstreetmap.josm.data.projection.ProjectionRegistry; 30 30 import org.openstreetmap.josm.gui.MainApplication; 31 31 import org.openstreetmap.josm.gui.layer.GpxLayer; … … 39 39 * 40 40 * @author Raphael Mack <ramack@raphael-mack.de> 41 41 */ 42 public class GpxData extends WithAttributes implements Data{42 public class GpxData extends WithAttributes implements OsmData<GeoImagePrimitive, GpxImageEntry, GpxImageTrack, GpxImageRelation> { 43 43 44 44 /** 45 45 * Constructs a new GpxData. -
src/org/openstreetmap/josm/data/gpx/GpxImageEntry.java
9 9 import java.util.function.Consumer; 10 10 11 11 import org.openstreetmap.josm.data.coor.CachedLatLon; 12 import org.openstreetmap.josm.data.coor.EastNorth; 12 13 import org.openstreetmap.josm.data.coor.LatLon; 14 import org.openstreetmap.josm.data.osm.BBox; 15 import org.openstreetmap.josm.data.osm.INode; 16 import org.openstreetmap.josm.data.osm.IPrimitive; 17 import org.openstreetmap.josm.data.osm.OsmPrimitiveType; 18 import org.openstreetmap.josm.data.osm.UniqueIdGenerator; 19 import org.openstreetmap.josm.data.osm.visitor.PrimitiveVisitor; 20 import org.openstreetmap.josm.data.projection.ProjectionRegistry; 13 21 import org.openstreetmap.josm.tools.ExifReader; 14 22 import org.openstreetmap.josm.tools.JosmRuntimeException; 15 23 import org.openstreetmap.josm.tools.Logging; … … 28 36 * Stores info about each image 29 37 * @since 14205 (extracted from gui.layer.geoimage.ImageEntry) 30 38 */ 31 public class GpxImageEntry implements Comparable<GpxImageEntry> { 39 public class GpxImageEntry extends GeoImagePrimitive implements INode { 40 private static final UniqueIdGenerator idGenerator = new UniqueIdGenerator(); 32 41 private File file; 33 42 private Integer exifOrientation; 34 43 private LatLon exifCoor; … … 414 423 } 415 424 416 425 @Override 417 public int compareTo(GpxImageEntry image) { 418 if (exifTime != null && image.exifTime != null) 419 return exifTime.compareTo(image.exifTime); 420 else if (exifTime == null && image.exifTime == null) 421 return 0; 422 else if (exifTime == null) 423 return -1; 424 else 425 return 1; 426 public int compareTo(IPrimitive iPrimitive) { 427 if (iPrimitive instanceof GpxImageEntry) { 428 GpxImageEntry image = (GpxImageEntry) iPrimitive; 429 if (exifTime != null && image.exifTime != null) 430 return exifTime.compareTo(image.exifTime); 431 else if (exifTime == null && image.exifTime == null) 432 return 0; 433 else if (exifTime == null) 434 return -1; 435 else 436 return 1; 437 } 438 return hashCode() - iPrimitive.hashCode(); 426 439 } 427 440 428 441 @Override … … 513 526 * If it has been tagged i.e. matched to a gpx track or retrieved lat/lon from exif 514 527 * @return {@code true} if it has been tagged 515 528 */ 529 @Override 516 530 public boolean isTagged() { 517 531 return pos != null; 518 532 } … … 654 668 setter.accept(value); 655 669 } 656 670 } 671 672 @Override 673 public void accept(PrimitiveVisitor visitor) { 674 visitor.visit(this); 675 } 676 677 @Override 678 public void visitReferrers(PrimitiveVisitor visitor) { 679 this.getReferrers().forEach(i -> i.accept(visitor)); 680 } 681 682 @Override 683 public BBox getBBox() { 684 return new BBox(getCoor()); 685 } 686 687 @Override 688 public List<? extends IPrimitive> getReferrers(boolean allowWithoutDataset) { 689 // TODO Auto-generated method stub 690 return null; 691 } 692 693 @Override 694 public OsmPrimitiveType getType() { 695 return OsmPrimitiveType.NODE; 696 } 697 698 @Override 699 public double lon() { 700 return getCoor().lon(); 701 } 702 703 @Override 704 public double lat() { 705 return getCoor().lat(); 706 } 707 708 @Override 709 public LatLon getCoor() { 710 return pos; 711 } 712 713 @Override 714 public void setCoor(LatLon coor) { 715 pos = new CachedLatLon(coor); 716 } 717 718 @Override 719 public void setEastNorth(EastNorth eastNorth) { 720 pos = new CachedLatLon(ProjectionRegistry.getProjection().eastNorth2latlon(eastNorth)); 721 } 722 723 @Override 724 public boolean isReferredByWays(int n) { 725 // TODO Auto-generated method stub 726 return false; 727 } 728 729 @Override 730 public UniqueIdGenerator getIdGenerator() { 731 return idGenerator; 732 } 657 733 } -
src/org/openstreetmap/josm/data/gpx/GpxImageRelation.java
1 // License: GPL. For details, see LICENSE file. 2 package org.openstreetmap.josm.data.gpx; 3 4 import java.util.ArrayList; 5 import java.util.List; 6 import java.util.Map; 7 8 import org.openstreetmap.josm.data.osm.BBox; 9 import org.openstreetmap.josm.data.osm.IPrimitive; 10 import org.openstreetmap.josm.data.osm.IRelation; 11 import org.openstreetmap.josm.data.osm.OsmPrimitiveType; 12 import org.openstreetmap.josm.data.osm.RelationMember; 13 import org.openstreetmap.josm.data.osm.UniqueIdGenerator; 14 import org.openstreetmap.josm.data.osm.visitor.PrimitiveVisitor; 15 16 public class GpxImageRelation extends GeoImagePrimitive implements IRelation<RelationMember> { 17 List<RelationMember> members = new ArrayList<>(); 18 private static final UniqueIdGenerator idGenerator = new UniqueIdGenerator(); 19 @Override 20 public void accept(PrimitiveVisitor visitor) { 21 visitor.visit(this); 22 } 23 24 @Override 25 public BBox getBBox() { 26 BBox returnBBox = new BBox(); 27 getReferrers().forEach(p -> returnBBox.add(p.getBBox())); 28 return null; 29 } 30 31 @Override 32 public List<? extends IPrimitive> getReferrers(boolean allowWithoutDataset) { 33 // TODO Auto-generated method stub 34 return null; 35 } 36 37 @Override 38 public OsmPrimitiveType getType() { 39 return OsmPrimitiveType.RELATION; 40 } 41 42 @Override 43 public int compareTo(IPrimitive o) { 44 // TODO Auto-generated method stub 45 return 0; 46 } 47 48 @Override 49 public UniqueIdGenerator getIdGenerator() { 50 return idGenerator; 51 } 52 53 @Override 54 protected void keysChangedImpl(Map<String, String> originalKeys) { 55 // TODO Auto-generated method stub 56 57 } 58 59 @Override 60 public int getMembersCount() { 61 return members.size(); 62 } 63 64 @Override 65 public RelationMember getMember(int index) { 66 return members.get(index); 67 } 68 69 @Override 70 public List<RelationMember> getMembers() { 71 return new ArrayList<>(members); 72 } 73 74 @Override 75 public void setMembers(List<RelationMember> members) { 76 this.members.clear(); 77 this.members.addAll(members); 78 } 79 80 @Override 81 public long getMemberId(int idx) { 82 return members.get(idx).getUniqueId(); 83 } 84 85 @Override 86 public String getRole(int idx) { 87 return members.get(idx).getRole(); 88 } 89 90 @Override 91 public OsmPrimitiveType getMemberType(int idx) { 92 return members.get(idx).getType(); 93 } 94 95 } -
src/org/openstreetmap/josm/data/gpx/GpxImageTrack.java
1 // License: GPL. For details, see LICENSE file. 2 package org.openstreetmap.josm.data.gpx; 3 4 import java.util.ArrayList; 5 import java.util.Collection; 6 import java.util.List; 7 import java.util.Map; 8 import java.util.stream.Collectors; 9 10 import org.openstreetmap.josm.data.Bounds; 11 import org.openstreetmap.josm.data.osm.BBox; 12 import org.openstreetmap.josm.data.osm.INode; 13 import org.openstreetmap.josm.data.osm.IPrimitive; 14 import org.openstreetmap.josm.data.osm.IWay; 15 import org.openstreetmap.josm.data.osm.OsmPrimitiveType; 16 import org.openstreetmap.josm.data.osm.UniqueIdGenerator; 17 import org.openstreetmap.josm.data.osm.visitor.PrimitiveVisitor; 18 19 /** 20 * @author Taylor Smock 21 * @since xxx 22 */ 23 public class GpxImageTrack extends GeoImagePrimitive implements IWay<GpxImageEntry>, IGpxTrack { 24 List<GpxImageEntry> images = new ArrayList<>(); 25 private static final UniqueIdGenerator idGenerator = new UniqueIdGenerator(); 26 @Override 27 public void accept(PrimitiveVisitor visitor) { 28 visitor.visit(this); 29 } 30 31 @Override 32 public void visitReferrers(PrimitiveVisitor visitor) { 33 this.getReferrers().forEach(p -> p.accept(visitor)); 34 } 35 36 @Override 37 public BBox getBBox() { 38 BBox returnBBox = new BBox(); 39 getNodes().forEach(n -> returnBBox.add(n.getBBox())); 40 return returnBBox; 41 } 42 43 @Override 44 public List<? extends IPrimitive> getReferrers(boolean allowWithoutDataset) { 45 // TODO Auto-generated method stub 46 return null; 47 } 48 49 @Override 50 public OsmPrimitiveType getType() { 51 return isClosed() ? OsmPrimitiveType.CLOSEDWAY : OsmPrimitiveType.WAY; 52 } 53 54 @Override 55 public String getString(String key) { 56 // TODO Auto-generated method stub 57 return null; 58 } 59 60 @Override 61 public <T> Collection<T> getCollection(String key) { 62 // TODO Auto-generated method stub 63 return null; 64 } 65 66 @Override 67 public void put(String key, Object value) { 68 // TODO Auto-generated method stub 69 70 } 71 72 @Override 73 public Map<String, Object> getAttributes() { 74 // TODO Auto-generated method stub 75 return null; 76 } 77 78 @Override 79 public GpxExtensionCollection getExtensions() { 80 // TODO Auto-generated method stub 81 return null; 82 } 83 84 @Override 85 public Collection<IGpxTrackSegment> getSegments() { 86 // TODO Auto-generated method stub 87 return null; 88 } 89 90 @Override 91 public Bounds getBounds() { 92 Bounds bounds = new Bounds(firstNode().getCoor(), lastNode().getCoor()); 93 images.forEach(i -> bounds.extend(i.getCoor())); 94 return bounds; 95 } 96 97 @Override 98 public double length() { 99 // TODO Auto-generated method stub 100 return 0; 101 } 102 103 @Override 104 public int getNodesCount() { 105 return images.size(); 106 } 107 108 @Override 109 public GpxImageEntry getNode(int index) { 110 return images.get(index); 111 } 112 113 @Override 114 public List<GpxImageEntry> getNodes() { 115 return new ArrayList<>(images); 116 } 117 118 @Override 119 public List<Long> getNodeIds() { 120 return images.stream().map(IPrimitive::getUniqueId).collect(Collectors.toList()); 121 } 122 123 @Override 124 public long getNodeId(int idx) { 125 return images.get(idx).getUniqueId(); 126 } 127 128 @Override 129 public void setNodes(List<GpxImageEntry> nodes) { 130 images.clear(); 131 images.addAll(nodes); 132 } 133 134 @Override 135 public boolean isClosed() { 136 return firstNode().equals(lastNode()); 137 } 138 139 @Override 140 public GpxImageEntry firstNode() { 141 return images.get(0); 142 } 143 144 @Override 145 public GpxImageEntry lastNode() { 146 return images.get(images.size() - 1); 147 } 148 149 @Override 150 public boolean isFirstLastNode(INode n) { 151 return firstNode().equals(n) || lastNode().equals(n); 152 } 153 154 @Override 155 public boolean isInnerNode(INode n) { 156 return !isFirstLastNode(n); 157 } 158 159 @Override 160 public UniqueIdGenerator getIdGenerator() { 161 return idGenerator; 162 } 163 164 @Override 165 protected void keysChangedImpl(Map<String, String> originalKeys) { 166 // TODO Auto-generated method stub 167 168 } 169 }