diff --git a/src/main/java/com/conveyal/r5/analyst/cluster/PathResult.java b/src/main/java/com/conveyal/r5/analyst/cluster/PathResult.java index dd42972b1..2fe797dcc 100644 --- a/src/main/java/com/conveyal/r5/analyst/cluster/PathResult.java +++ b/src/main/java/com/conveyal/r5/analyst/cluster/PathResult.java @@ -57,6 +57,7 @@ public class PathResult { "routes", "boardStops", "alightStops", + "feedIds", "rideTimes", "accessTime", "egressTime", diff --git a/src/main/java/com/conveyal/r5/transit/TransitLayer.java b/src/main/java/com/conveyal/r5/transit/TransitLayer.java index 7ec85e6fa..8d77d890a 100644 --- a/src/main/java/com/conveyal/r5/transit/TransitLayer.java +++ b/src/main/java/com/conveyal/r5/transit/TransitLayer.java @@ -873,4 +873,8 @@ public String stopString(int stopIndex, EntityRepresentation nameOrId) { default -> stopId; }; } + + public String feedFromStop(int stopIndex) { + return stopIdForIndex.get(stopIndex) == null ? "[new]" : stopIdForIndex.get(stopIndex).split(":")[0]; + } } diff --git a/src/main/java/com/conveyal/r5/transit/path/RouteSequence.java b/src/main/java/com/conveyal/r5/transit/path/RouteSequence.java index 1e60478f3..dd269cbf0 100644 --- a/src/main/java/com/conveyal/r5/transit/path/RouteSequence.java +++ b/src/main/java/com/conveyal/r5/transit/path/RouteSequence.java @@ -33,22 +33,26 @@ public RouteSequence(PatternSequence patternSequence, TransitLayer transitLayer) /** Returns details summarizing this route sequence, using GTFS ids stored in the supplied transitLayer. */ public String[] detailsWithGtfsIds (TransitLayer transitLayer, CsvResultOptions csvOptions){ - StringJoiner routeIds = new StringJoiner("|"); - StringJoiner boardStopIds = new StringJoiner("|"); - StringJoiner alightStopIds = new StringJoiner("|"); + StringJoiner routeString = new StringJoiner("|"); + StringJoiner boardStops = new StringJoiner("|"); + StringJoiner alightStops = new StringJoiner("|"); + StringJoiner feedString = new StringJoiner("|"); StringJoiner rideTimes = new StringJoiner("|"); for (int i = 0; i < routes.size(); i++) { - routeIds.add(transitLayer.routeString(routes.get(i), csvOptions.routeRepresentation)); - boardStopIds.add(transitLayer.stopString(stopSequence.boardStops.get(i), csvOptions.stopRepresentation)); - alightStopIds.add(transitLayer.stopString(stopSequence.alightStops.get(i), csvOptions.stopRepresentation)); + routeString.add(transitLayer.routeString(routes.get(i), csvOptions.routeRepresentation)); + boardStops.add(transitLayer.stopString(stopSequence.boardStops.get(i), csvOptions.stopRepresentation)); + alightStops.add(transitLayer.stopString(stopSequence.alightStops.get(i), csvOptions.stopRepresentation)); + if (csvOptions.feedRepresentation != null) { + feedString.add(transitLayer.feedFromStop(stopSequence.boardStops.get(i))); + } rideTimes.add(String.format("%.1f", stopSequence.rideTimesSeconds.get(i) / 60f)); } String accessTime = stopSequence.access == null ? null : String.format("%.1f", stopSequence.access.time / 60f); String egressTime = stopSequence.egress == null ? null : String.format("%.1f", stopSequence.egress.time / 60f); return new String[]{ - routeIds.toString(), - boardStopIds.toString(), - alightStopIds.toString(), + routeString.toString(), + boardStops.toString(), + alightStops.toString(), rideTimes.toString(), accessTime, egressTime