Changeset 14075 in josm
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/gui/layer/OsmDataLayer.java
r14060 r14075 73 73 import org.openstreetmap.josm.data.osm.OsmPrimitiveComparator; 74 74 import org.openstreetmap.josm.data.osm.Relation; 75 import org.openstreetmap.josm.data.osm.Tagged; 75 76 import org.openstreetmap.josm.data.osm.UploadPolicy; 76 77 import org.openstreetmap.josm.data.osm.Way; … … 747 748 trk.add(trkseg); 748 749 } 749 if (!n.isTagged()) { 750 if (!n.isTagged() || containsOnlyGpxTags(n)) { 750 751 doneNodes.add(n); 751 752 } … … 755 756 gpxData.addTrack(new ImmutableGpxTrack(trk, trkAttr)); 756 757 }); 758 } 759 760 private static boolean containsOnlyGpxTags(Tagged t) { 761 for (String key : t.getKeys().keySet()) { 762 if (!GpxConstants.WPT_KEYS.contains(key)) { 763 return false; 764 } 765 } 766 return true; 757 767 } 758 768 -
trunk/src/org/openstreetmap/josm/io/GpxWriter.java
r12156 r14075 10 10 import java.nio.charset.StandardCharsets; 11 11 import java.util.Collection; 12 import java.util.Date; 12 13 import java.util.List; 13 14 import java.util.Map; … … 28 29 import org.openstreetmap.josm.data.gpx.WayPoint; 29 30 import org.openstreetmap.josm.tools.JosmRuntimeException; 31 import org.openstreetmap.josm.tools.date.DateUtils; 30 32 31 33 /** … … 81 83 82 84 out.println("<?xml version='1.0' encoding='UTF-8'?>"); 83 out.println("<gpx version=\"1.1\" creator=\"JOSM GPX export\" xmlns=\"http://www.topografix.com/GPX/1/1\" \n" +84 85 " xmlns:xsi=\""+XMLConstants.W3C_XML_SCHEMA_INSTANCE_NS_URI+"\" \n" +86 85 out.println("<gpx version=\"1.1\" creator=\"JOSM GPX export\" xmlns=\"http://www.topografix.com/GPX/1/1\""); 86 out.println((hasExtensions ? String.format(" xmlns:josm=\"%s\"%n", JOSM_EXTENSIONS_NAMESPACE_URI) : "") + 87 " xmlns:xsi=\""+XMLConstants.W3C_XML_SCHEMA_INSTANCE_NS_URI+"\""); 88 out.println(" xsi:schemaLocation=\"http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd\">"); 87 89 indent = " "; 88 90 writeMetaData(); … … 112 114 if (value != null) { 113 115 simpleTag(key, value); 116 } else { 117 Object val = obj.get(key); 118 if (val instanceof Date) { 119 simpleTag(key, DateUtils.getGpxFormat().format(val)); 120 } 114 121 } 115 122 } -
trunk/test/unit/org/openstreetmap/josm/gui/layer/OsmDataLayerTest.java
r13174 r14075 7 7 import static org.junit.Assert.assertTrue; 8 8 9 import java.io.ByteArrayInputStream; 9 10 import java.io.File; 11 import java.nio.charset.StandardCharsets; 12 import java.text.DateFormat; 13 import java.util.Collection; 14 import java.util.Iterator; 10 15 11 16 import org.junit.Before; … … 16 21 import org.openstreetmap.josm.data.Bounds; 17 22 import org.openstreetmap.josm.data.coor.LatLon; 23 import org.openstreetmap.josm.data.gpx.GpxConstants; 24 import org.openstreetmap.josm.data.gpx.GpxData; 25 import org.openstreetmap.josm.data.gpx.GpxTrack; 26 import org.openstreetmap.josm.data.gpx.GpxTrackSegment; 27 import org.openstreetmap.josm.data.gpx.WayPoint; 18 28 import org.openstreetmap.josm.data.osm.DataSet; 19 29 import org.openstreetmap.josm.data.osm.Node; … … 22 32 import org.openstreetmap.josm.data.osm.Way; 23 33 import org.openstreetmap.josm.gui.MainApplication; 34 import org.openstreetmap.josm.io.IllegalDataException; 35 import org.openstreetmap.josm.io.OsmReader; 24 36 import org.openstreetmap.josm.testutils.JOSMTestRules; 37 import org.openstreetmap.josm.tools.date.DateUtils; 25 38 26 39 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; … … 190 203 /** 191 204 * Unit test of {@link OsmDataLayer#toGpxData}. 192 */ 193 @Test 194 public void testToGpxData() { 195 fillDataSet(ds); 196 assertNotNull(layer.toGpxData()); 205 * @throws IllegalDataException never 206 */ 207 @Test 208 public void testToGpxData() throws IllegalDataException { 209 ds.mergeFrom(OsmReader.parseDataSet(new ByteArrayInputStream(( 210 "<?xml version='1.0' encoding='UTF-8'?>\n" + 211 "<osm version='0.6' upload='false' generator='JOSM'>\n" + 212 " <node id='-546306' timestamp='2018-08-01T10:00:00Z' lat='47.0' lon='9.0'>\n" + 213 " <tag k='ele' v='123' />\n" + 214 " <tag k='time' v='2018-08-01T10:00:00Z' />\n" + 215 " </node>\n" + 216 " <node id='-546307' timestamp='2018-08-01T10:01:00Z' lat='47.1' lon='9.1'>\n" + 217 " <tag k='ele' v='456' />\n" + 218 " <tag k='time' v='2018-08-01T10:01:00Z' />\n" + 219 " </node>\n" + 220 " <way id='-546308'>\n" + 221 " <nd ref='-546306' />\n" + 222 " <nd ref='-546307' />\n" + 223 " </way>\r\n" + 224 "</osm>").getBytes(StandardCharsets.UTF_8)), null)); 225 GpxData gpx = layer.toGpxData(); 226 assertNotNull(gpx); 227 // Check metadata 228 assertEquals(new Bounds(47.0, 9.0, 47.1, 9.1), gpx.recalculateBounds()); 229 // Check there is no waypoint 230 assertTrue(gpx.getWaypoints().isEmpty()); 231 // Check that track is correct 232 assertEquals(1, gpx.getTrackCount()); 233 GpxTrack track = gpx.getTracks().iterator().next(); 234 Collection<GpxTrackSegment> segments = track.getSegments(); 235 assertEquals(1, segments.size()); 236 Collection<WayPoint> trackpoints = segments.iterator().next().getWayPoints(); 237 assertEquals(2, trackpoints.size()); 238 Iterator<WayPoint> it = trackpoints.iterator(); 239 DateFormat gpxFormat = DateUtils.getGpxFormat(); 240 WayPoint p1 = it.next(); 241 assertEquals(new LatLon(47.0, 9.0), p1.getCoor()); 242 assertEquals("123", p1.get(GpxConstants.PT_ELE)); 243 assertEquals("2018-08-01T10:00:00.000Z", gpxFormat.format(p1.get(GpxConstants.PT_TIME))); 244 WayPoint p2 = it.next(); 245 assertEquals(new LatLon(47.1, 9.1), p2.getCoor()); 246 assertEquals("456", p2.get(GpxConstants.PT_ELE)); 247 assertEquals("2018-08-01T10:01:00.000Z", gpxFormat.format(p2.get(GpxConstants.PT_TIME))); 197 248 } 198 249
Note:
See TracChangeset
for help on using the changeset viewer.