private OsmTrack compileTrip(ScheduledTrip trip, int offset) { OsmTrack track = new OsmTrack(); track.iternity = new ArrayList<String>(); ScheduledTrip current = trip; ScheduledLine lastLine = new ScheduledLine(); ScheduledLine dummyLine = new ScheduledLine(); List<ScheduledTrip> list = new ArrayList<ScheduledTrip>(); int distance = 0; ScheduledTrip itrip = null; String profile = extractProfile(rc.localFunction); OsmNodeP nextNode = null; while (current != null) { System.out.println("trip=" + current); OsmNodeP node = current.getTargetNode(); OsmPathElement pe = new OsmPathElement(node.ilon, node.ilat, node.selev, null); track.addNode(pe); if (nextNode != null) { distance += node.calcDistance(nextNode); } boolean isScheduled = current.link instanceof ScheduledLink; boolean isConnection = current.link.descriptionBitmap == null && !isScheduled; ScheduledLine line = isScheduled ? ((ScheduledLink) current.link).line : isConnection ? dummyLine : null; if (line != lastLine && !isConnection) { itrip = new ScheduledTrip(); itrip.departure = current.departure; itrip.arrival = current.arrival; itrip.originNode = current.originNode; itrip.link = current.link; if (isScheduled && list.size() > 0) { list.get(list.size() - 1).originNode = current.getTargetNode(); } list.add(itrip); } else if (itrip != null && !isConnection) { itrip.departure = current.departure; itrip.originNode = current.originNode; } lastLine = line; current = current.origin; nextNode = node; } track.distance = distance; track.cost = trip.cost; for (int i = list.size() - 1; i >= 0; i--) { current = list.get(i); String lineName = profile; boolean isScheduled = current.link instanceof ScheduledLink; if (isScheduled) { lineName = ((ScheduledLink) current.link).line.name; } String stationName = "*position*"; if (current.originNode instanceof StationNode) { stationName = ((StationNode) current.originNode).name; } String nextStationName = "*position*"; if (i > 0 && list.get(i - 1).originNode instanceof StationNode) { nextStationName = ((StationNode) list.get(i - 1).originNode).name; } { Date d0 = new Date(time0 + 60000L * offset + current.departure); Date d1 = new Date(time0 + 60000L * offset + current.arrival); if (track.iternity.size() > 0) track.iternity.add(""); track.iternity.add("depart: " + d0 + " " + stationName); track.iternity.add(" --- " + lineName + " ---"); track.iternity.add("arrive: " + d1 + " " + nextStationName); } } return track; }