114 List<List<String>> tripRecords =
new ArrayList<>();
115 List<List<String>> legRecords =
new ArrayList<>();
116 Tuple<Iterable<?>,
Iterable<?>> record =
new Tuple<>(tripRecords, legRecords);
117 List<TripStructureUtils.Trip> trips = TripStructureUtils.getTrips(experiencedPlan);
119 for (
int i = 0; i < trips.size(); i++) {
120 TripStructureUtils.Trip trip = trips.get(i);
121 List<String> tripRecord =
new ArrayList<>();
122 tripRecords.add(tripRecord);
123 tripRecord.add(personId.toString());
124 final String tripNo = Integer.toString(i + 1);
125 tripRecord.add(tripNo);
126 String tripId = personId +
"_" + tripNo;
127 tripRecord.add(tripId);
128 double distance = 0.0;
129 double departureTime = trip.getOriginActivity().getEndTime().orElse(0);
130 double travelTime = trip.getDestinationActivity().getStartTime().orElse(0) - departureTime;
133 double totalWaitingTime = 0.0;
134 double currentLongestShareDistance = Double.MIN_VALUE;
135 String currentModeWithLongestShare =
"";
136 List<String> modes =
new ArrayList<>();
137 String lastActivityType = trip.getOriginActivity().getType();
138 String nextActivityType = trip.getDestinationActivity().getType();
141 Id<Link> fromLinkId = trip.getOriginActivity().getLinkId();
142 Id<Link> toLinkId = trip.getDestinationActivity().getLinkId();
145 int euclideanDistance = (int) CoordUtils.calcEuclideanDistance(fromCoord, toCoord);
146 String firstPtBoardingStop = null;
147 String lastPtEgressStop = null;
149 String mainMode =
"";
153 if (mainMode == null)
160 for (
Leg leg : trip.getLegsOnly()) {
161 modes.add(leg.getMode());
162 final double legDist = leg.getRoute().getDistance();
164 Double boardingTime = (Double) leg.getAttributes().getAttribute(EventsToLegs.ENTER_VEHICLE_TIME_ATTRIBUTE_NAME);
165 if (boardingTime != null) {
166 double waitingTime = boardingTime - leg.getDepartureTime().seconds();
167 totalWaitingTime += waitingTime;
169 if (StringUtils.isBlank(currentModeWithLongestShare) || legDist > currentLongestShareDistance) {
170 currentLongestShareDistance = legDist;
171 currentModeWithLongestShare = leg.getMode();
174 if (leg.getRoute() instanceof TransitPassengerRoute route) {
175 firstPtBoardingStop = firstPtBoardingStop != null ? firstPtBoardingStop : route.getAccessStopId().toString();
176 lastPtEgressStop = route.getEgressStopId().toString();
184 tripRecord.add(Integer.toString((
int) Math.round(distance)));
185 tripRecord.add(Integer.toString(euclideanDistance));
186 tripRecord.add(mainMode);
187 tripRecord.add(currentModeWithLongestShare);
188 tripRecord.add(modes.stream().collect(Collectors.joining(
"-")));
189 tripRecord.add(lastActivityType);
190 tripRecord.add(nextActivityType);
191 tripRecord.add(String.valueOf(fromFacilityId));
192 tripRecord.add(String.valueOf(fromLinkId));
193 tripRecord.add(Double.toString(fromCoord.
getX()));
194 tripRecord.add(Double.toString(fromCoord.
getY()));
196 tripRecord.add(String.valueOf(toFacilityId));
197 tripRecord.add(String.valueOf(toLinkId));
198 tripRecord.add(Double.toString(toCoord.getX()));
199 tripRecord.add(Double.toString(toCoord.getY()));
200 tripRecord.add(firstPtBoardingStop != null ? firstPtBoardingStop :
"");
201 tripRecord.add(lastPtEgressStop != null ? lastPtEgressStop :
"");
207 log.error(errorMessage);
213 List<PlanElement> allElements =
new ArrayList<>();
214 allElements.add(trip.getOriginActivity());
215 allElements.addAll(trip.getTripElements());
216 allElements.add(trip.getDestinationActivity());
218 if (pe instanceof
Activity currentAct) {
219 if (prevLeg != null) {
220 List<String> legRecord =
getLegRecord(prevLeg, personId.toString(), tripId, prevAct, currentAct, trip);
221 legRecords.add(legRecord);
223 prevAct = currentAct;
225 }
else if (pe instanceof
Leg) {
String identifyMainMode(List<? extends PlanElement > tripElements)
Coord getCoordFromActivity(Activity activity)
List< String > getLegRecord(Leg leg, String personId, String tripId, Activity previousAct, Activity nextAct, TripStructureUtils.Trip trip)
StringBuilder getTripErrorMessage(List< String > tripRecord)
String writeTime(double time)
final CustomTripsWriterExtension tripsWriterExtension
final AnalysisMainModeIdentifier mainModeIdentifier
List< String > getAdditionalTripColumns(TripStructureUtils.Trip trip)
final String [] TRIPSHEADER
final CustomTimeWriter customTimeWriter