20 package ch.sbb.matsim.routing.pt.raptor;
22 import java.util.ArrayList;
23 import java.util.Collection;
24 import java.util.Collections;
25 import java.util.HashMap;
26 import java.util.List;
28 import java.util.Random;
29 import java.util.stream.Collectors;
31 import jakarta.inject.Inject;
32 import jakarta.inject.Provider;
74 this.routingModules =
new HashMap<>();
77 String mode = params.getMode();
78 this.routingModules.put(mode, routingModuleProviders.get(mode).get());
91 return findAccessStops(fromFacility, toFacility, person, departureTime, routingAttributes, parameters, data);
94 return findEgressStops(fromFacility, toFacility, person, departureTime, routingAttributes, parameters, data);
96 return Collections.emptyList();
106 List<TransitStopFacility> stops =
findNearbyStops(fromFacility, parameters, data);
107 List<InitialStop> initialStops = stops.stream().map(stop -> {
110 double travelTime = Math.ceil(beelineDistance / parameters.
getBeelineWalkSpeed()) + accessTime;
113 }).collect(Collectors.toList());
124 List<TransitStopFacility> stops =
findNearbyStops(toFacility, parameters, data);
125 List<InitialStop> initialStops = stops.stream().map(stop -> {
128 double travelTime = Math.ceil(beelineDistance / parameters.
getBeelineWalkSpeed()) + egressTime;
131 }).collect(Collectors.toList());
142 List<InitialStop> initialStops =
new ArrayList<>();
144 case CalcLeastCostModePerStop:
146 addInitialStopsForParamSet(fromFacility, toFacility, person, departureTime, routingAttributes, direction, parameters, data, x, y, initialStops, parameterSet);
149 case RandomSelectOneModePerRoutingRequestAndDirection:
153 addInitialStopsForParamSet(fromFacility, toFacility, person, departureTime, routingAttributes, direction, parameters, data, x, y,
165 private void addInitialStopsForParamSet(
Facility fromFacility,
Facility toFacility,
Person person,
double departureTime,
Attributes routingAttributes,
Direction direction,
RaptorParameters parameters,
SwissRailRaptorData data,
double x,
double y, List<InitialStop> initialStops,
IntermodalAccessEgressParameterSet paramset) {
166 String mode = paramset.
getMode();
174 boolean personMatches =
true;
175 if (personFilterAttribute != null) {
177 String attrValue = attr == null ? null : attr.toString();
178 personMatches = personFilterValue.equals(attrValue);
183 if (stopFilterAttribute != null) {
185 filteredStopsQT = data.stopFilterAttribute2Value2StopsQT.get(stopFilterAttribute).get(stopFilterValue);
187 filteredStopsQT = data.stopsQT;
193 searchRadius = Math.min(searchRadius, tripBasedSearchRadius);
194 Collection<TransitStopFacility> stopFacilities = filteredStopsQT.
getDisk(x, y, searchRadius);
195 if (stopFacilities.size() < 2) {
199 stopFacilities = filteredStopsQT.
getDisk(x, y, searchRadius);
204 if (linkIdAttribute != null) {
205 Object attr = stop.getAttributes().getAttribute(linkIdAttribute);
211 List<? extends PlanElement> routeParts;
220 if (routeParts == null) {
225 if (routeParts == null) {
231 if ((stopFacility != stop) || accessTime>0.0 || egressTime>0.0) {
237 transferLeg.
setRoute(transferRoute);
240 List<PlanElement> tmp =
new ArrayList<>(routeParts.size() + 1);
241 tmp.addAll(routeParts);
242 tmp.add(transferLeg);
249 transferLeg.
setRoute(transferRoute);
252 List<PlanElement> tmp =
new ArrayList<>(routeParts.size() + 1);
253 tmp.add(transferLeg);
254 tmp.addAll(routeParts);
259 InitialStop iStop =
new InitialStop(stop, accessEgress.disutility, accessEgress.travelTime, accessEgress.routeParts);
260 initialStops.add(iStop);
266 if (pe instanceof
Leg) {
267 ((Leg) pe).setDepartureTimeUndefined();
278 Collection<TransitStopFacility> stopFacilities = data.stopsQT.getDisk(x, y, parameters.
getSearchRadius());
279 if (stopFacilities.size() < 2) {
282 stopFacilities = data.stopsQT.getDisk(x, y, nearestDistance + parameters.
getExtensionRadius());
284 if (stopFacilities instanceof List) {
285 return (List<TransitStopFacility>) stopFacilities;
287 return new ArrayList<>(stopFacilities);
317 return this.delegate.
getId();
synchronized void prepareStopFilterQuadTreeIfNotExistent(String stopFilterAttribute, String stopFilterValue)
String getPersonFilterValue()
List< IntermodalAccessEgressParameterSet > getIntermodalAccessEgressParameterSets()
Attributes getAttributes()
Map< String, Object > getCustomAttributes()
void setDistance(final double distance)
double getExtensionRadius()
static RoutingRequest of(Facility fromFacility, Facility toFacility, double departureTime, Person person, Attributes attributes)
double getMarginalUtilityOfTravelTime_utl_s(String mode)
static double calcEuclideanDistance(Coord coord, Coord other)
List< InitialStop > findStops(Facility fromFacility, Facility toFacility, Person person, double departureTime, Attributes routingAttributes, RaptorParameters parameters, SwissRailRaptorData data, RaptorStopFinder.Direction type)
void addInitialStopsForParamSet(Facility fromFacility, Facility toFacility, Person person, double departureTime, Attributes routingAttributes, Direction direction, RaptorParameters parameters, SwissRailRaptorData data, double x, double y, List< InitialStop > initialStops, IntermodalAccessEgressParameterSet paramset)
static< T extends ConfigGroup > T addOrGetModule(Config config, Class< T > moduleClass)
Map< String, Object > getCustomAttributes()
static Route createGenericRouteImpl(Id< Link > startLinkId, Id< Link > endLinkId)
static Random getLocalInstance()
double getInitialSearchRadius()
final RaptorIntermodalAccessEgress intermodalAE
double getBeelineWalkSpeed()
double getBeelineWalkDistanceFactor()
static double getStopAccessTime(TransitStopFacility stopFacility)
boolean isUseIntermodalAccessEgress()
String getStopFilterValue()
static< T > Id< T > create(final long key, final Class< T > type)
DefaultRaptorStopFinder(Config config, RaptorIntermodalAccessEgress intermodalAE, Map< String, Provider< RoutingModule >> routingModuleProviders)
String getLinkIdAttribute()
List< InitialStop > findEgressStops(Facility fromFacility, Facility toFacility, Person person, double departureTime, Attributes routingAttributes, RaptorParameters parameters, SwissRailRaptorData data)
Object getAttribute(final String attribute)
List< TransitStopFacility > findNearbyStops(Facility facility, RaptorParameters parameters, SwissRailRaptorData data)
String getStopFilterAttribute()
List<? extends PlanElement > calcRoute(RoutingRequest request)
void setRoute(Route route)
static Leg createLeg(String transportMode)
IntermodalAccessEgressModeSelection getIntermodalAccessEgressModeSelection()
List< InitialStop > findAccessStops(Facility fromFacility, Facility toFacility, Person person, double departureTime, Attributes routingAttributes, RaptorParameters parameters, SwissRailRaptorData data)
T getClosest(final double x, final double y)
Id< TransitStopFacility > getId()
DefaultRaptorStopFinder(RaptorIntermodalAccessEgress intermodalAE, Map< String, RoutingModule > routingModules)
String getPersonFilterAttribute()
double getShareTripSearchRadius()
final TransitStopFacility delegate
RIntermodalAccessEgress calcIntermodalAccessEgress(List<? extends PlanElement > legs, RaptorParameters params, Person person, Direction direction)
void setTravelTime(final double seconds)
Collection< T > getDisk(final double x, final double y, final double distance)
static double getStopEgressTime(TransitStopFacility stopFacility)
final Map< String, RoutingModule > routingModules
double getSearchExtensionRadius()
List< InitialStop > findIntermodalStops(Facility fromFacility, Facility toFacility, Person person, double departureTime, Attributes routingAttributes, Direction direction, RaptorParameters parameters, SwissRailRaptorData data)
SwissRailRaptorConfigGroup getConfig()
void setTravelTime(final double travelTime)