public static GpxData toGpxData(DataSet data, File file) { GpxData gpxData = new GpxData(); gpxData.storageFile = file; HashSet<Node> doneNodes = new HashSet<Node>(); for (Way w : data.ways) { if (w.incomplete || w.deleted) continue; ImmutableGpxTrack trk = new ImmutableGpxTrack( new LinkedList<Collection<WayPoint>>(), new HashMap<String, Object>()); gpxData.tracks.add(trk); if (w.get("name") != null) trk.attr.put("name", w.get("name")); ArrayList<WayPoint> trkseg = null; for (Node n : w.nodes) { if (n.incomplete || n.deleted) { trkseg = null; continue; } if (trkseg == null) { trkseg = new ArrayList<WayPoint>(); trk.trackSegs.add(trkseg); } if (!n.isTagged()) { doneNodes.add(n); } WayPoint wpt = new WayPoint(n.getCoor()); if (!n.isTimestampEmpty()) { wpt.attr.put("time", DateUtils.fromDate(n.getTimestamp())); wpt.setTime(); } trkseg.add(wpt); } } // what is this loop meant to do? it creates waypoints but never // records them? for (Node n : data.nodes) { if (n.incomplete || n.deleted || doneNodes.contains(n)) continue; WayPoint wpt = new WayPoint(n.getCoor()); if (!n.isTimestampEmpty()) { wpt.attr.put("time", DateUtils.fromDate(n.getTimestamp())); wpt.setTime(); } if (n.keys != null && n.keys.containsKey("name")) { wpt.attr.put("name", n.keys.get("name")); } } return gpxData; }