66import java .net .MalformedURLException ;
77import java .util .Arrays ;
88import java .util .HashMap ;
9+ import java .util .HashSet ;
910import java .util .Map ;
1011import java .util .Optional ;
12+ import java .util .Set ;
13+ import java .util .stream .Collectors ;
1114
12- import org .eqasim .core .analysis .legs .LegListenerItem ;
1315import org .eqasim .core .scenario .cutter .extent .ScenarioExtent ;
1416import org .eqasim .core .scenario .cutter .extent .ShapeScenarioExtent ;
1517import org .matsim .api .core .v01 .Coord ;
@@ -45,7 +47,7 @@ public class ExportLinkTraversals {
4547 static public void main (String [] args ) throws ConfigurationException , MalformedURLException , IOException {
4648 CommandLine cmd = new CommandLine .Builder (args ) //
4749 .requireOptions ("events-path" , "output-path" ) //
48- .allowOptions ("network-path" , "extent-path" ) //
50+ .allowOptions ("network-path" , "extent-path" , "modes" ) //
4951 .build ();
5052
5153 ScenarioExtent extent = null ;
@@ -61,10 +63,16 @@ static public void main(String[] args) throws ConfigurationException, MalformedU
6163 Optional .empty ()).build ();
6264 }
6365
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+
6472 BufferedWriter writer = IOUtils .getBufferedWriter (cmd .getOptionStrict ("output-path" ));
6573
6674 EventsManager eventsManager = EventsUtils .createEventsManager ();
67- eventsManager .addHandler (new TraversalExporter (writer , extent , network ));
75+ eventsManager .addHandler (new TraversalExporter (writer , extent , network , modes ));
6876 new MatsimEventsReader (eventsManager ).readFile (cmd .getOptionStrict ("events-path" ));
6977
7078 writer .close ();
@@ -80,23 +88,26 @@ private static class TraversalExporter implements VehicleEntersTrafficEventHandl
8088 private final IdMap <Person , LinkEnterEvent > enterEvents = new IdMap <>(Person .class );
8189 private final Map <Id <Person >, Integer > tripIndex = new HashMap <>();
8290 private final Map <Id <Person >, Integer > legIndex = new HashMap <>();
91+ private final Set <String > modes ;
8392
84- TraversalExporter (BufferedWriter writer , ScenarioExtent extent , Network network ) {
93+ TraversalExporter (BufferedWriter writer , ScenarioExtent extent , Network network , Set < String > modes ) {
8594 this .writer = writer ;
8695 this .extent = extent ;
8796 this .network = network ;
97+ this .modes = modes ;
8898
8999 try {
90100 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 " );
92103 } catch (IOException e ) {
93104 throw new RuntimeException (e );
94105 }
95106 }
96107
97108 @ Override
98109 public void handleEvent (VehicleEntersTrafficEvent event ) {
99- if (event .getNetworkMode (). equals ( "car" )) {
110+ if (checkMode ( event .getNetworkMode ())) {
100111 drivers .put (event .getVehicleId (), event .getPersonId ());
101112 }
102113 }
@@ -127,7 +138,7 @@ public void handleEvent(LinkLeaveEvent event) {
127138 }
128139 }
129140
130- private void writeTraversal (Id <Person > personId , LinkEnterEvent enterEvent , LinkLeaveEvent leaveEvent ) {
141+ private void writeTraversal (Id <Person > personId , LinkEnterEvent enterEvent , LinkLeaveEvent leaveEvent ) {
131142 final Id <Vehicle > vehicleId ;
132143 final Id <Link > linkId ;
133144
@@ -153,7 +164,7 @@ private void writeTraversal(Id<Person> personId, LinkEnterEvent enterEvent, Lin
153164 return ; // ignore this one as it doesn't touch the requested extent
154165 }
155166 }
156-
167+
157168 int localTripIndex = tripIndex .getOrDefault (personId , 0 );
158169 int localLegIndex = legIndex .getOrDefault (personId , 0 );
159170
@@ -195,5 +206,9 @@ public void handleEvent(ActivityEndEvent event) {
195206 tripIndex .put (event .getPersonId (), personTripIndex );
196207 legIndex .put (event .getPersonId (), localLegIndex );
197208 }
209+
210+ private boolean checkMode (String mode ) {
211+ return modes .isEmpty () || modes .contains (mode );
212+ }
198213 }
199214}
0 commit comments