5
5
import java .io .IOException ;
6
6
import java .net .MalformedURLException ;
7
7
import java .util .Arrays ;
8
+ import java .util .HashMap ;
9
+ import java .util .Map ;
8
10
import java .util .Optional ;
9
11
12
+ import org .eqasim .core .analysis .legs .LegListenerItem ;
10
13
import org .eqasim .core .scenario .cutter .extent .ScenarioExtent ;
11
14
import org .eqasim .core .scenario .cutter .extent .ShapeScenarioExtent ;
12
15
import org .matsim .api .core .v01 .Coord ;
13
16
import org .matsim .api .core .v01 .Id ;
14
17
import org .matsim .api .core .v01 .IdMap ;
18
+ import org .matsim .api .core .v01 .events .ActivityEndEvent ;
15
19
import org .matsim .api .core .v01 .events .LinkEnterEvent ;
16
20
import org .matsim .api .core .v01 .events .LinkLeaveEvent ;
17
21
import org .matsim .api .core .v01 .events .VehicleEntersTrafficEvent ;
18
22
import org .matsim .api .core .v01 .events .VehicleLeavesTrafficEvent ;
23
+ import org .matsim .api .core .v01 .events .handler .ActivityEndEventHandler ;
19
24
import org .matsim .api .core .v01 .events .handler .LinkEnterEventHandler ;
20
25
import org .matsim .api .core .v01 .events .handler .LinkLeaveEventHandler ;
21
26
import org .matsim .api .core .v01 .events .handler .VehicleEntersTrafficEventHandler ;
30
35
import org .matsim .core .events .MatsimEventsReader ;
31
36
import org .matsim .core .network .NetworkUtils ;
32
37
import org .matsim .core .network .io .MatsimNetworkReader ;
38
+ import org .matsim .core .router .TripStructureUtils ;
33
39
import org .matsim .core .utils .io .IOUtils ;
34
40
import org .matsim .vehicles .Vehicle ;
35
41
@@ -65,13 +71,15 @@ static public void main(String[] args) throws ConfigurationException, MalformedU
65
71
}
66
72
67
73
private static class TraversalExporter implements VehicleEntersTrafficEventHandler ,
68
- VehicleLeavesTrafficEventHandler , LinkEnterEventHandler , LinkLeaveEventHandler {
74
+ VehicleLeavesTrafficEventHandler , LinkEnterEventHandler , LinkLeaveEventHandler , ActivityEndEventHandler {
69
75
private final BufferedWriter writer ;
70
76
private final ScenarioExtent extent ;
71
77
private final Network network ;
72
78
73
79
private final IdMap <Vehicle , Id <Person >> drivers = new IdMap <>(Vehicle .class );
74
80
private final IdMap <Person , LinkEnterEvent > enterEvents = new IdMap <>(Person .class );
81
+ private final Map <Id <Person >, Integer > tripIndex = new HashMap <>();
82
+ private final Map <Id <Person >, Integer > legIndex = new HashMap <>();
75
83
76
84
TraversalExporter (BufferedWriter writer , ScenarioExtent extent , Network network ) {
77
85
this .writer = writer ;
@@ -80,7 +88,7 @@ private static class TraversalExporter implements VehicleEntersTrafficEventHandl
80
88
81
89
try {
82
90
writer .write (String .join (";" , Arrays .asList ( //
83
- "person_id" , "vehicle_id" , "link_id" , "enter_time" , "leave_time" )) + "\n " );
91
+ "person_id" , "vehicle_id" , "link_id" , "enter_time" , "leave_time" , "trip_index" , "leg_index" )) + "\n " );
84
92
} catch (IOException e ) {
85
93
throw new RuntimeException (e );
86
94
}
@@ -119,7 +127,7 @@ public void handleEvent(LinkLeaveEvent event) {
119
127
}
120
128
}
121
129
122
- private void writeTraversal (Id <Person > personId , LinkEnterEvent enterEvent , LinkLeaveEvent leaveEvent ) {
130
+ private void writeTraversal (Id <Person > personId , LinkEnterEvent enterEvent , LinkLeaveEvent leaveEvent ) {
123
131
final Id <Vehicle > vehicleId ;
124
132
final Id <Link > linkId ;
125
133
@@ -145,18 +153,47 @@ private void writeTraversal(Id<Person> personId, LinkEnterEvent enterEvent, Link
145
153
return ; // ignore this one as it doesn't touch the requested extent
146
154
}
147
155
}
156
+
157
+ int localTripIndex = tripIndex .getOrDefault (personId , 0 );
158
+ int localLegIndex = legIndex .getOrDefault (personId , 0 );
148
159
149
160
try {
150
161
writer .write (String .join (";" , new String [] { //
151
162
personId .toString (), //
152
163
vehicleId .toString (), //
153
164
linkId .toString (), //
154
165
String .valueOf (enterTime ), //
155
- String .valueOf (leaveTime ) //
166
+ String .valueOf (leaveTime ), //
167
+ String .valueOf (localTripIndex ), //
168
+ String .valueOf (localLegIndex ) //
156
169
}) + "\n " );
157
170
} catch (IOException e ) {
158
171
throw new RuntimeException (e );
159
172
}
160
173
}
174
+
175
+ @ Override
176
+ public void handleEvent (ActivityEndEvent event ) {
177
+ Integer localLegIndex = legIndex .get (event .getPersonId ());
178
+
179
+ if (localLegIndex == null ) {
180
+ localLegIndex = 0 ;
181
+ } else {
182
+ localLegIndex = localLegIndex + 1 ;
183
+ }
184
+
185
+ Integer personTripIndex = tripIndex .get (event .getPersonId ());
186
+
187
+ if (!TripStructureUtils .isStageActivityType (event .getActType ())) {
188
+ if (personTripIndex == null ) {
189
+ personTripIndex = 0 ;
190
+ } else {
191
+ personTripIndex = personTripIndex + 1 ;
192
+ }
193
+ }
194
+
195
+ tripIndex .put (event .getPersonId (), personTripIndex );
196
+ legIndex .put (event .getPersonId (), localLegIndex );
197
+ }
161
198
}
162
199
}
0 commit comments