Skip to content

Commit 464df6c

Browse files
authored
add indices for trip and leg to traversals (#239)
1 parent 9e76449 commit 464df6c

File tree

1 file changed

+41
-4
lines changed

1 file changed

+41
-4
lines changed

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

+41-4
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,22 @@
55
import java.io.IOException;
66
import java.net.MalformedURLException;
77
import java.util.Arrays;
8+
import java.util.HashMap;
9+
import java.util.Map;
810
import java.util.Optional;
911

12+
import org.eqasim.core.analysis.legs.LegListenerItem;
1013
import org.eqasim.core.scenario.cutter.extent.ScenarioExtent;
1114
import org.eqasim.core.scenario.cutter.extent.ShapeScenarioExtent;
1215
import org.matsim.api.core.v01.Coord;
1316
import org.matsim.api.core.v01.Id;
1417
import org.matsim.api.core.v01.IdMap;
18+
import org.matsim.api.core.v01.events.ActivityEndEvent;
1519
import org.matsim.api.core.v01.events.LinkEnterEvent;
1620
import org.matsim.api.core.v01.events.LinkLeaveEvent;
1721
import org.matsim.api.core.v01.events.VehicleEntersTrafficEvent;
1822
import org.matsim.api.core.v01.events.VehicleLeavesTrafficEvent;
23+
import org.matsim.api.core.v01.events.handler.ActivityEndEventHandler;
1924
import org.matsim.api.core.v01.events.handler.LinkEnterEventHandler;
2025
import org.matsim.api.core.v01.events.handler.LinkLeaveEventHandler;
2126
import org.matsim.api.core.v01.events.handler.VehicleEntersTrafficEventHandler;
@@ -30,6 +35,7 @@
3035
import org.matsim.core.events.MatsimEventsReader;
3136
import org.matsim.core.network.NetworkUtils;
3237
import org.matsim.core.network.io.MatsimNetworkReader;
38+
import org.matsim.core.router.TripStructureUtils;
3339
import org.matsim.core.utils.io.IOUtils;
3440
import org.matsim.vehicles.Vehicle;
3541

@@ -65,13 +71,15 @@ static public void main(String[] args) throws ConfigurationException, MalformedU
6571
}
6672

6773
private static class TraversalExporter implements VehicleEntersTrafficEventHandler,
68-
VehicleLeavesTrafficEventHandler, LinkEnterEventHandler, LinkLeaveEventHandler {
74+
VehicleLeavesTrafficEventHandler, LinkEnterEventHandler, LinkLeaveEventHandler, ActivityEndEventHandler {
6975
private final BufferedWriter writer;
7076
private final ScenarioExtent extent;
7177
private final Network network;
7278

7379
private final IdMap<Vehicle, Id<Person>> drivers = new IdMap<>(Vehicle.class);
7480
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<>();
7583

7684
TraversalExporter(BufferedWriter writer, ScenarioExtent extent, Network network) {
7785
this.writer = writer;
@@ -80,7 +88,7 @@ private static class TraversalExporter implements VehicleEntersTrafficEventHandl
8088

8189
try {
8290
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");
8492
} catch (IOException e) {
8593
throw new RuntimeException(e);
8694
}
@@ -119,7 +127,7 @@ public void handleEvent(LinkLeaveEvent event) {
119127
}
120128
}
121129

122-
private void writeTraversal(Id<Person> personId, LinkEnterEvent enterEvent, LinkLeaveEvent leaveEvent) {
130+
private void writeTraversal(Id<Person> personId, LinkEnterEvent enterEvent, LinkLeaveEvent leaveEvent) {
123131
final Id<Vehicle> vehicleId;
124132
final Id<Link> linkId;
125133

@@ -145,18 +153,47 @@ private void writeTraversal(Id<Person> personId, LinkEnterEvent enterEvent, Link
145153
return; // ignore this one as it doesn't touch the requested extent
146154
}
147155
}
156+
157+
int localTripIndex = tripIndex.getOrDefault(personId, 0);
158+
int localLegIndex = legIndex.getOrDefault(personId, 0);
148159

149160
try {
150161
writer.write(String.join(";", new String[] { //
151162
personId.toString(), //
152163
vehicleId.toString(), //
153164
linkId.toString(), //
154165
String.valueOf(enterTime), //
155-
String.valueOf(leaveTime) //
166+
String.valueOf(leaveTime), //
167+
String.valueOf(localTripIndex), //
168+
String.valueOf(localLegIndex) //
156169
}) + "\n");
157170
} catch (IOException e) {
158171
throw new RuntimeException(e);
159172
}
160173
}
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+
}
161198
}
162199
}

0 commit comments

Comments
 (0)