6
6
import java .net .MalformedURLException ;
7
7
import java .util .Arrays ;
8
8
import java .util .HashMap ;
9
+ import java .util .HashSet ;
9
10
import java .util .Map ;
10
11
import java .util .Optional ;
12
+ import java .util .Set ;
13
+ import java .util .stream .Collectors ;
11
14
12
- import org .eqasim .core .analysis .legs .LegListenerItem ;
13
15
import org .eqasim .core .scenario .cutter .extent .ScenarioExtent ;
14
16
import org .eqasim .core .scenario .cutter .extent .ShapeScenarioExtent ;
15
17
import org .matsim .api .core .v01 .Coord ;
@@ -45,7 +47,7 @@ public class ExportLinkTraversals {
45
47
static public void main (String [] args ) throws ConfigurationException , MalformedURLException , IOException {
46
48
CommandLine cmd = new CommandLine .Builder (args ) //
47
49
.requireOptions ("events-path" , "output-path" ) //
48
- .allowOptions ("network-path" , "extent-path" ) //
50
+ .allowOptions ("network-path" , "extent-path" , "modes" ) //
49
51
.build ();
50
52
51
53
ScenarioExtent extent = null ;
@@ -61,10 +63,16 @@ static public void main(String[] args) throws ConfigurationException, MalformedU
61
63
Optional .empty ()).build ();
62
64
}
63
65
66
+ Set <String > modes = new HashSet <>();
67
+ if (cmd .hasOption ("modes" )) {
68
+ modes = Arrays .asList (cmd .getOptionStrict ("modes" ).split ("," )).stream ().map (String ::trim )
69
+ .collect (Collectors .toSet ());
70
+ }
71
+
64
72
BufferedWriter writer = IOUtils .getBufferedWriter (cmd .getOptionStrict ("output-path" ));
65
73
66
74
EventsManager eventsManager = EventsUtils .createEventsManager ();
67
- eventsManager .addHandler (new TraversalExporter (writer , extent , network ));
75
+ eventsManager .addHandler (new TraversalExporter (writer , extent , network , modes ));
68
76
new MatsimEventsReader (eventsManager ).readFile (cmd .getOptionStrict ("events-path" ));
69
77
70
78
writer .close ();
@@ -80,23 +88,26 @@ private static class TraversalExporter implements VehicleEntersTrafficEventHandl
80
88
private final IdMap <Person , LinkEnterEvent > enterEvents = new IdMap <>(Person .class );
81
89
private final Map <Id <Person >, Integer > tripIndex = new HashMap <>();
82
90
private final Map <Id <Person >, Integer > legIndex = new HashMap <>();
91
+ private final Set <String > modes ;
83
92
84
- TraversalExporter (BufferedWriter writer , ScenarioExtent extent , Network network ) {
93
+ TraversalExporter (BufferedWriter writer , ScenarioExtent extent , Network network , Set < String > modes ) {
85
94
this .writer = writer ;
86
95
this .extent = extent ;
87
96
this .network = network ;
97
+ this .modes = modes ;
88
98
89
99
try {
90
100
writer .write (String .join (";" , Arrays .asList ( //
91
- "person_id" , "vehicle_id" , "link_id" , "enter_time" , "leave_time" , "trip_index" , "leg_index" )) + "\n " );
101
+ "person_id" , "vehicle_id" , "link_id" , "enter_time" , "leave_time" , "trip_index" , "leg_index" ))
102
+ + "\n " );
92
103
} catch (IOException e ) {
93
104
throw new RuntimeException (e );
94
105
}
95
106
}
96
107
97
108
@ Override
98
109
public void handleEvent (VehicleEntersTrafficEvent event ) {
99
- if (event .getNetworkMode (). equals ( "car" )) {
110
+ if (checkMode ( event .getNetworkMode ())) {
100
111
drivers .put (event .getVehicleId (), event .getPersonId ());
101
112
}
102
113
}
@@ -127,7 +138,7 @@ public void handleEvent(LinkLeaveEvent event) {
127
138
}
128
139
}
129
140
130
- private void writeTraversal (Id <Person > personId , LinkEnterEvent enterEvent , LinkLeaveEvent leaveEvent ) {
141
+ private void writeTraversal (Id <Person > personId , LinkEnterEvent enterEvent , LinkLeaveEvent leaveEvent ) {
131
142
final Id <Vehicle > vehicleId ;
132
143
final Id <Link > linkId ;
133
144
@@ -153,7 +164,7 @@ private void writeTraversal(Id<Person> personId, LinkEnterEvent enterEvent, Lin
153
164
return ; // ignore this one as it doesn't touch the requested extent
154
165
}
155
166
}
156
-
167
+
157
168
int localTripIndex = tripIndex .getOrDefault (personId , 0 );
158
169
int localLegIndex = legIndex .getOrDefault (personId , 0 );
159
170
@@ -195,5 +206,9 @@ public void handleEvent(ActivityEndEvent event) {
195
206
tripIndex .put (event .getPersonId (), personTripIndex );
196
207
legIndex .put (event .getPersonId (), localLegIndex );
197
208
}
209
+
210
+ private boolean checkMode (String mode ) {
211
+ return modes .isEmpty () || modes .contains (mode );
212
+ }
198
213
}
199
214
}
0 commit comments