Skip to content

Commit 9644e9b

Browse files
authored
feat: exract traversals by mode (#241)
1 parent ef86b74 commit 9644e9b

File tree

1 file changed

+23
-8
lines changed

1 file changed

+23
-8
lines changed

core/src/main/java/org/eqasim/core/tools/ExportLinkTraversals.java

+23-8
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,12 @@
66
import java.net.MalformedURLException;
77
import java.util.Arrays;
88
import java.util.HashMap;
9+
import java.util.HashSet;
910
import java.util.Map;
1011
import java.util.Optional;
12+
import java.util.Set;
13+
import java.util.stream.Collectors;
1114

12-
import org.eqasim.core.analysis.legs.LegListenerItem;
1315
import org.eqasim.core.scenario.cutter.extent.ScenarioExtent;
1416
import org.eqasim.core.scenario.cutter.extent.ShapeScenarioExtent;
1517
import 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

Comments
 (0)