Skip to content

Commit 3d8648a

Browse files
committed
fix: ensure range-raptor queries can return multiple paths
1 parent c4d0ade commit 3d8648a

File tree

6 files changed

+43
-9
lines changed

6 files changed

+43
-9
lines changed

raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/DefaultRangeRaptorWorker.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ public void findTransitForRound() {
168168
}
169169

170170
@Override
171-
public void findOnBoardAccessForRound() {
171+
public void findOnBoardAccessForRound(int iterationDepartureTime) {
172172
for (var accessPath : accessPaths.onBoardAccessPaths()) {
173173
RaptorRoute<T> route;
174174
try {
@@ -186,8 +186,10 @@ public void findOnBoardAccessForRound() {
186186
return;
187187
}
188188

189-
var boardTime = trip.arrival(accessPath.stopPositionInPattern());
190-
transitWorker.registerOnBoardAccessStopArrival(accessPath, boardTime, trip);
189+
var boardTime = trip.departure(accessPath.stopPositionInPattern());
190+
if (calculator.isInIteration(boardTime, iterationDepartureTime)) {
191+
transitWorker.registerOnBoardAccessStopArrival(accessPath, boardTime, trip);
192+
}
191193
}
192194
}
193195

raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/RangeRaptor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ public RaptorRouterResult<T> route() {
125125
private void runRaptorForMinute(int iterationDepartureTime) {
126126
setupIteration(iterationDepartureTime);
127127
worker.findAccessOnStreetForRound();
128-
worker.findOnBoardAccessForRound();
128+
worker.findOnBoardAccessForRound(iterationDepartureTime);
129129

130130
while (hasMoreRounds()) {
131131
lifeCycle.prepareForNextRound(roundTracker.nextRound());

raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/RangeRaptorWorkerComposite.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,9 +83,9 @@ public void findTransitForRound() {
8383
}
8484

8585
@Override
86-
public void findOnBoardAccessForRound() {
86+
public void findOnBoardAccessForRound(int iterationDepartureTime) {
8787
for (RangeRaptorWorker<T> child : children) {
88-
child.findOnBoardAccessForRound();
88+
child.findOnBoardAccessForRound(iterationDepartureTime);
8989
}
9090
}
9191

raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/internalapi/RangeRaptorWorker.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public interface RangeRaptorWorker<T extends RaptorTripSchedule> {
2727
/**
2828
* Find on-board access for round (accesses on-board an already started trip)
2929
*/
30-
void findOnBoardAccessForRound();
30+
void findOnBoardAccessForRound(int iterationDepartureTime);
3131

3232
/**
3333
* Perform on-board (accesses on-board an already started trip) transit search for boardings and

raptor/src/main/java/org/opentripplanner/raptor/rangeraptor/transit/AccessEgressFunctions.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ public final class AccessEgressFunctions {
5050
* No opening hours is better than being restricted
5151
* </li>
5252
* <li>
53-
* If Both have opening hours, both need to be accepted
53+
* If both have opening hours, both need to be accepted
5454
* </li>
5555
* </ol>
5656
*/

raptor/src/test/java/org/opentripplanner/raptor/moduletests/M01_OnBoardAccessTest.java

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ private RaptorRequestBuilder<TestTripSchedule> prepareRequest() {
4242
.searchParams()
4343
.earliestDepartureTime(T00_00)
4444
.latestArrivalTime(T01_00)
45-
.searchWindow(Duration.ofMinutes(2))
45+
.searchWindow(Duration.ofMinutes(60))
4646
.timetable(true);
4747

4848
return builder;
@@ -319,4 +319,36 @@ void walkAndOnBoard() {
319319
pathsToString(raptorResponse)
320320
);
321321
}
322+
323+
@Test
324+
@DisplayName("Range query results in multiple consecutive paths")
325+
void rangeQuery() {
326+
data
327+
.access(
328+
new TestRaptorOnBoardAccess(0, 0, 1, STOP_B, 0),
329+
new TestRaptorOnBoardAccess(0, 1, 1, STOP_B, 0)
330+
)
331+
.withRoutes()
332+
.withTimetables(
333+
"""
334+
-- R1
335+
A B C D
336+
0:00 0:05:05 0:10 0:15
337+
0:05 0:10 0:15 0:20
338+
"""
339+
)
340+
.egress("D ~ Walk 30s");
341+
342+
var requestBuilder = prepareRequest();
343+
344+
var raptorResponse = raptorService.route(requestBuilder.build(), data);
345+
346+
// The result of the range query should include a path for each access
347+
assertEquals(
348+
"""
349+
B ~ BUS R1 0:05:05 0:15 ~ D ~ Walk 30s [0:05:05 0:15:30 10m25s Tₙ0 C₁1_255]
350+
B ~ BUS R1 0:10 0:20 ~ D ~ Walk 30s [0:10 0:20:30 10m30s Tₙ0 C₁1_260]""",
351+
pathsToString(raptorResponse)
352+
);
353+
}
322354
}

0 commit comments

Comments
 (0)