Skip to content

Commit b72d1f9

Browse files
committed
Add support for via locations in access/egress
1 parent 04b8e47 commit b72d1f9

9 files changed

Lines changed: 417 additions & 80 deletions

File tree

application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/router/AccessEgressFetcher.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@
1313
import org.opentripplanner.ext.ridehailing.RideHailingAccessShifter;
1414
import org.opentripplanner.framework.application.OTPFeature;
1515
import org.opentripplanner.routing.algorithm.raptoradapter.router.street.AccessEgressRouter;
16+
import org.opentripplanner.routing.algorithm.raptoradapter.router.street.AccessEgressRouterFactory;
1617
import org.opentripplanner.routing.algorithm.raptoradapter.router.street.AccessEgressType;
17-
import org.opentripplanner.routing.algorithm.raptoradapter.router.street.DefaultAccessEgressRouter;
1818
import org.opentripplanner.routing.algorithm.raptoradapter.router.street.FlexAccessEgressRouter;
1919
import org.opentripplanner.routing.algorithm.raptoradapter.transit.RoutingAccessEgress;
2020
import org.opentripplanner.routing.algorithm.raptoradapter.transit.mappers.AccessEgressMapper;
@@ -66,7 +66,7 @@ public AccessEgressFetcher(
6666
this.carpoolingService = carpoolingService;
6767
this.transitServiceResolver = new TransitServiceResolver(serverContext.transitService());
6868
this.accessEgressMapper = new AccessEgressMapper(transitServiceResolver);
69-
this.accessEgressRouter = new DefaultAccessEgressRouter();
69+
this.accessEgressRouter = AccessEgressRouterFactory.create(request);
7070
}
7171

7272
Collection<? extends RoutingAccessEgress> fetchAccess() {
@@ -108,7 +108,8 @@ private Collection<? extends RoutingAccessEgress> fetchAccessEgresses(AccessEgre
108108
type,
109109
durationLimit,
110110
stopCountLimit,
111-
linkingContext
111+
linkingContext,
112+
serverContext.streetLimitationParametersService().maxCarSpeed()
112113
);
113114
var accessEgresses = accessEgressMapper.mapNearbyStops(nearbyStops);
114115
accessEgresses = timeshiftRideHailing(streetRequest, type, accessEgresses);

application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/router/street/AccessEgressRouter.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@ public Collection<NearbyStop> findAccessEgresses(
3535
AccessEgressType accessOrEgress,
3636
Duration durationLimit,
3737
int maxStopCount,
38-
LinkingContext linkingContext
38+
LinkingContext linkingContext,
39+
float maxCarSpeed
3940
) {
4041
OTPRequestTimeoutException.checkForTimeout();
4142

@@ -63,7 +64,8 @@ public Collection<NearbyStop> findAccessEgresses(
6364
durationLimit,
6465
maxStopCount,
6566
linkingContext,
66-
ignoreVertices
67+
ignoreVertices,
68+
maxCarSpeed
6769
);
6870

6971
var results = ListUtils.combine(zeroDistanceAccessEgress, streetAccessEgress);
@@ -82,7 +84,8 @@ abstract Collection<NearbyStop> findStreetAccessEgresses(
8284
Duration durationLimit,
8385
int maxStopCount,
8486
LinkingContext linkingContext,
85-
Set<Vertex> ignoreVertices
87+
Set<Vertex> ignoreVertices,
88+
float maxCarSpeed
8689
);
8790

8891
/**
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package org.opentripplanner.routing.algorithm.raptoradapter.router.street;
2+
3+
import org.opentripplanner.routing.api.request.RouteRequest;
4+
5+
/**
6+
* This factory encapsulates the logic for deciding which access/egress router to use.
7+
*/
8+
public class AccessEgressRouterFactory {
9+
10+
/**
11+
* @return {@link DefaultAccessEgressRouter} if there are no via locations, otherwise
12+
* {@link ViaAccessEgressRouter}.
13+
*/
14+
public static AccessEgressRouter create(RouteRequest request) {
15+
return request.isViaSearch() ? new ViaAccessEgressRouter() : new DefaultAccessEgressRouter();
16+
}
17+
}

application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/router/street/DefaultAccessEgressRouter.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,6 @@
1717
*/
1818
public class DefaultAccessEgressRouter extends AccessEgressRouter {
1919

20-
/**
21-
* Find accesses or egresses.
22-
*/
2320
@Override
2421
Collection<NearbyStop> findStreetAccessEgresses(
2522
RouteRequest request,
@@ -29,7 +26,8 @@ Collection<NearbyStop> findStreetAccessEgresses(
2926
Duration durationLimit,
3027
int maxStopCount,
3128
LinkingContext linkingContext,
32-
Set<Vertex> ignoreVertices
29+
Set<Vertex> ignoreVertices,
30+
float maxCarSpeed
3331
) {
3432
var originVertices = accessOrEgress.isAccess()
3533
? linkingContext.findVertices(request.from())

application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/router/street/DirectFlexRouter.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,8 @@ public static List<Itinerary> route(
3636
AccessEgressType.ACCESS,
3737
serverContext.flexParameters().maxAccessWalkDuration(),
3838
0,
39-
linkingContext
39+
linkingContext,
40+
serverContext.streetLimitationParametersService().maxCarSpeed()
4041
);
4142
Collection<NearbyStop> egressStops = accessEgressRouter.findAccessEgresses(
4243
request,
@@ -45,7 +46,8 @@ public static List<Itinerary> route(
4546
AccessEgressType.EGRESS,
4647
serverContext.flexParameters().maxEgressWalkDuration(),
4748
0,
48-
linkingContext
49+
linkingContext,
50+
serverContext.streetLimitationParametersService().maxCarSpeed()
4951
);
5052

5153
var flexRouter = new FlexRouter(

application/src/main/java/org/opentripplanner/routing/algorithm/raptoradapter/router/street/FlexAccessEgressRouter.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,8 @@ public static Collection<FlexAccessEgress> routeAccessEgress(
4242
AccessEgressType.ACCESS,
4343
serverContext.flexParameters().maxAccessWalkDuration(),
4444
0,
45-
linkingContext
45+
linkingContext,
46+
serverContext.streetLimitationParametersService().maxCarSpeed()
4647
)
4748
: List.of();
4849

@@ -54,7 +55,8 @@ public static Collection<FlexAccessEgress> routeAccessEgress(
5455
AccessEgressType.EGRESS,
5556
serverContext.flexParameters().maxEgressWalkDuration(),
5657
0,
57-
linkingContext
58+
linkingContext,
59+
serverContext.streetLimitationParametersService().maxCarSpeed()
5860
)
5961
: List.of();
6062

0 commit comments

Comments
 (0)