MATSIM
Public Member Functions | Protected Member Functions | Private Member Functions | Private Attributes | List of all members
org.matsim.pt.router.TransitRouterImpl Class Reference
Inheritance diagram for org.matsim.pt.router.TransitRouterImpl:
Inheritance graph
[legend]

Public Member Functions

 TransitRouterImpl (final TransitRouterConfig trConfig, final TransitSchedule schedule)
 
 TransitRouterImpl (final TransitRouterConfig trConfig, final PreparedTransitSchedule preparedTransitSchedule, final TransitRouterNetwork routerNetwork, final TravelTime travelTime, final TransitTravelDisutility travelDisutility)
 
List<? extends PlanElementcalcRoute (final RoutingRequest request)
 
TransitRouterNetwork getTransitRouterNetwork ()
 

Protected Member Functions

void setTransitTravelDisutility (TransitTravelDisutility transitTravelDisutility)
 
final double getWalkTime (Person person, Coord coord, Coord toCoord)
 
final double getTransferTime (Person person, Coord coord, Coord toCoord)
 
final List< LegcreateDirectWalkLegList (Person person, Coord fromCoord, Coord toCoord)
 
List< LegconvertPassengerRouteToLegList (double departureTime, InternalTransitPassengerRoute p, Coord fromCoord, Coord toCoord, Person person)
 
final TransitRouterConfig getConfig ()
 
final double getWalkDisutility (Person person, Coord coord, Coord toCoord)
 
final TransitTravelDisutility getTravelDisutility ()
 

Private Member Functions

Map< Node, InitialNodelocateWrappedNearestTransitNodes (Person person, Coord coord, double departureTime)
 

Private Attributes

final TransitRouterNetwork transitNetwork
 
final TravelTime travelTime
 
final TransitTravelDisutility travelDisutility
 
final PreparedTransitSchedule preparedTransitSchedule
 
boolean cacheTree
 
TransitLeastCostPathTree tree
 
Facility previousFromFacility
 
double previousDepartureTime
 

Detailed Description

Not thread-safe because MultiNodeDijkstra is not. Does not expect the TransitSchedule to change once constructed! michaz '13

Author
mrieser

Definition at line 45 of file TransitRouterImpl.java.

Constructor & Destructor Documentation

◆ TransitRouterImpl() [1/2]

org.matsim.pt.router.TransitRouterImpl.TransitRouterImpl ( final TransitRouterConfig  trConfig,
final TransitSchedule  schedule 
)

Definition at line 57 of file TransitRouterImpl.java.

References org.matsim.pt.router.TransitRouterNetwork.createFromSchedule(), org.matsim.pt.router.TransitRouterConfig.getBeelineWalkConnectionDistance(), org.matsim.pt.router.TransitRouterConfig.isCacheTree(), and org.matsim.pt.router.AbstractTransitRouter.setTransitTravelDisutility().

57  {
58  super(trConfig);
59  this.transitNetwork = TransitRouterNetwork.createFromSchedule(schedule,
61  this.preparedTransitSchedule = new PreparedTransitSchedule(schedule);
62  TransitRouterNetworkTravelTimeAndDisutility transitRouterNetworkTravelTimeAndDisutility = new TransitRouterNetworkTravelTimeAndDisutility(
63  trConfig,
64  new PreparedTransitSchedule(schedule));
65  this.travelDisutility = transitRouterNetworkTravelTimeAndDisutility;
66  this.travelTime = transitRouterNetworkTravelTimeAndDisutility;
68 
70  }
final TransitRouterNetwork transitNetwork
void setTransitTravelDisutility(TransitTravelDisutility transitTravelDisutility)
final TransitTravelDisutility travelDisutility
static TransitRouterNetwork createFromSchedule(final TransitSchedule schedule, final double maxBeelineWalkConnectionDistance)
final PreparedTransitSchedule preparedTransitSchedule
Here is the call graph for this function:

◆ TransitRouterImpl() [2/2]

org.matsim.pt.router.TransitRouterImpl.TransitRouterImpl ( final TransitRouterConfig  trConfig,
final PreparedTransitSchedule  preparedTransitSchedule,
final TransitRouterNetwork  routerNetwork,
final TravelTime  travelTime,
final TransitTravelDisutility  travelDisutility 
)

Definition at line 72 of file TransitRouterImpl.java.

References org.matsim.pt.router.TransitRouterConfig.isCacheTree(), org.matsim.pt.router.TransitRouterImpl.preparedTransitSchedule, org.matsim.pt.router.TransitRouterImpl.travelDisutility, and org.matsim.pt.router.TransitRouterImpl.travelTime.

Here is the call graph for this function:

Member Function Documentation

◆ locateWrappedNearestTransitNodes()

Map<Node, InitialNode> org.matsim.pt.router.TransitRouterImpl.locateWrappedNearestTransitNodes ( Person  person,
Coord  coord,
double  departureTime 
)
private

Definition at line 89 of file TransitRouterImpl.java.

References org.matsim.core.utils.geometry.CoordUtils.calcEuclideanDistance(), org.matsim.pt.router.AbstractTransitRouter.getConfig(), org.matsim.pt.router.TransitRouterNetwork.getNearestNode(), org.matsim.pt.router.TransitRouterNetwork.getNearestNodes(), org.matsim.pt.router.TransitRouterImpl.getTransitRouterNetwork(), org.matsim.pt.router.AbstractTransitRouter.getWalkDisutility(), and org.matsim.pt.router.AbstractTransitRouter.getWalkTime().

Referenced by org.matsim.pt.router.TransitRouterImpl.calcRoute().

89  {
90  Collection<TransitRouterNetwork.TransitRouterNetworkNode> nearestNodes = getTransitRouterNetwork().getNearestNodes(
91  coord,
92  this.getConfig().getSearchRadius());
93  if (nearestNodes.size() < 2) {
94  // also enlarge search area if only one stop found, maybe a second one is near the border of the search area
95  TransitRouterNetwork.TransitRouterNetworkNode nearestNode = this.getTransitRouterNetwork()
96  .getNearestNode(coord);
97  if (nearestNode != null) { // transit schedule might be completely empty!
98  double distance = CoordUtils.calcEuclideanDistance(coord,
99  nearestNode.stop.getStopFacility().getCoord());
100  nearestNodes = this.getTransitRouterNetwork()
101  .getNearestNodes(coord, distance + this.getConfig().getExtensionRadius());
102  }
103  }
104  Map<Node, InitialNode> wrappedNearestNodes = new LinkedHashMap<>();
105  for (TransitRouterNetwork.TransitRouterNetworkNode node : nearestNodes) {
106  Coord toCoord = node.stop.getStopFacility().getCoord();
107  double initialTime = getWalkTime(person, coord, toCoord);
108  double initialCost = getWalkDisutility(person, coord, toCoord);
109  wrappedNearestNodes.put(node, new InitialNode(initialCost, initialTime + departureTime));
110  }
111  return wrappedNearestNodes;
112  }
final double getWalkDisutility(Person person, Coord coord, Coord toCoord)
final double getWalkTime(Person person, Coord coord, Coord toCoord)
Collection< TransitRouterNetworkNode > getNearestNodes(final Coord coord, final double distance)
TransitRouterNetworkNode getNearestNode(final Coord coord)
Here is the call graph for this function:

◆ calcRoute()

List<? extends PlanElement> org.matsim.pt.router.TransitRouterImpl.calcRoute ( final RoutingRequest  request)

Implements org.matsim.pt.router.TransitRouter.

Definition at line 115 of file TransitRouterImpl.java.

References org.matsim.pt.router.AbstractTransitRouter.convertPassengerRouteToLegList(), org.matsim.pt.router.AbstractTransitRouter.getConfig(), org.matsim.api.core.v01.BasicLocation.getCoord(), org.matsim.core.router.RoutingRequest.getDepartureTime(), org.matsim.pt.router.TransitRouterConfig.getDirectWalkFactor(), org.matsim.core.router.RoutingRequest.getFromFacility(), org.matsim.core.router.RoutingRequest.getPerson(), org.matsim.core.router.RoutingRequest.getToFacility(), org.matsim.pt.router.TransitLeastCostPathTree.getTransitPassengerRoute(), org.matsim.pt.router.TransitRouterImpl.getTransitRouterNetwork(), org.matsim.pt.router.InternalTransitPassengerRoute.getTravelCost(), org.matsim.pt.router.AbstractTransitRouter.getTravelDisutility(), org.matsim.pt.router.AbstractTransitRouter.getWalkDisutility(), org.matsim.pt.router.TransitRouterImpl.locateWrappedNearestTransitNodes(), and org.matsim.pt.router.TransitRouterImpl.previousDepartureTime.

115  {
116  final Facility fromFacility = request.getFromFacility();
117  final Facility toFacility = request.getToFacility();
118  final double departureTime = request.getDepartureTime();
119  final Person person = request.getPerson();
120 
121  // find possible start stops
122  Map<Node, InitialNode> wrappedFromNodes = this.locateWrappedNearestTransitNodes(person,
123  fromFacility.getCoord(),
124  departureTime);
125 
126 
127  // find possible end stops
128  Map<Node, InitialNode> wrappedToNodes = this.locateWrappedNearestTransitNodes(person,
129  toFacility.getCoord(),
130  departureTime);
131 
132  InternalTransitPassengerRoute transitPassengerRoute = null;
133 
134  if (cacheTree) {
135  if ((fromFacility != previousFromFacility) && (departureTime != previousDepartureTime)) { // Compute tree only if fromFacility and departure time are different from previous request.
136  tree = new TransitLeastCostPathTree(getTransitRouterNetwork(),
138  getTravelTime(),
139  wrappedFromNodes,
140  person);
141  }
142  } else { // Compute new tree for every routing request
143  tree = new TransitLeastCostPathTree(getTransitRouterNetwork(),
145  getTravelTime(),
146  wrappedFromNodes,
147  wrappedToNodes,
148  person);
149  // yyyyyy This sounds like it is doing the full tree. But I think it is not. Kai, nov'16
150  // Yes, only if you leave out the wrappedToNodes from the argument list, it does compute the full tree. See the new case above. dz, june'18
151  }
152 
153  // find routes between start and end stop
154  transitPassengerRoute = tree.getTransitPassengerRoute(wrappedToNodes);
155 
156  if (transitPassengerRoute == null) {
157  return null; // TripRouter / FallbackRoutingModule will create a direct walk leg
158  }
159  double pathCost = transitPassengerRoute.getTravelCost();
160 
161  double directWalkCost = getWalkDisutility(person, fromFacility.getCoord(), toFacility.getCoord());
162 
163  if (directWalkCost * getConfig().getDirectWalkFactor() < pathCost) {
164  return null; // TripRouter / FallbackRoutingModule will create a direct walk leg
165  }
166 
167  previousFromFacility = fromFacility;
168  previousDepartureTime = departureTime;
169 
170  return convertPassengerRouteToLegList(departureTime,
171  transitPassengerRoute,
172  fromFacility.getCoord(),
173  toFacility.getCoord(),
174  person);
175  }
Map< Node, InitialNode > locateWrappedNearestTransitNodes(Person person, Coord coord, double departureTime)
final double getWalkDisutility(Person person, Coord coord, Coord toCoord)
List< Leg > convertPassengerRouteToLegList(double departureTime, InternalTransitPassengerRoute p, Coord fromCoord, Coord toCoord, Person person)
InternalTransitPassengerRoute getTransitPassengerRoute(final Map< Node, InitialNode > toNodes)
final TransitTravelDisutility getTravelDisutility()
Here is the call graph for this function:

◆ getTransitRouterNetwork()

TransitRouterNetwork org.matsim.pt.router.TransitRouterImpl.getTransitRouterNetwork ( )

◆ setTransitTravelDisutility()

void org.matsim.pt.router.AbstractTransitRouter.setTransitTravelDisutility ( TransitTravelDisutility  transitTravelDisutility)
protectedinherited

Definition at line 55 of file AbstractTransitRouter.java.

Referenced by org.matsim.pt.router.TransitRouterImpl.TransitRouterImpl().

55  {
56  this.travelDisutility = transitTravelDisutility;
57  }

◆ getWalkTime()

final double org.matsim.pt.router.AbstractTransitRouter.getWalkTime ( Person  person,
Coord  coord,
Coord  toCoord 
)
protectedinherited

◆ getTransferTime()

final double org.matsim.pt.router.AbstractTransitRouter.getTransferTime ( Person  person,
Coord  coord,
Coord  toCoord 
)
protectedinherited

◆ createDirectWalkLegList()

final List<Leg> org.matsim.pt.router.AbstractTransitRouter.createDirectWalkLegList ( Person  person,
Coord  fromCoord,
Coord  toCoord 
)
protectedinherited

TODO: Replace by FallbackRoutingModule?! - gl-nov'19

Definition at line 72 of file AbstractTransitRouter.java.

References org.matsim.core.population.routes.RouteUtils.createGenericRouteImpl(), org.matsim.core.population.PopulationUtils.createLeg(), org.matsim.pt.router.AbstractTransitRouter.getWalkTime(), org.matsim.api.core.v01.TransportMode.pt, org.matsim.core.router.TripStructureUtils.setRoutingMode(), org.matsim.api.core.v01.population.Route.setTravelTime(), and org.matsim.api.core.v01.TransportMode.walk.

72  {
73  List<Leg> legs = new ArrayList<>();
74  Leg leg = PopulationUtils.createLeg(TransportMode.walk);
75  double walkTime = getWalkTime(person, fromCoord, toCoord);
76  leg.setTravelTime(walkTime);
77  TripStructureUtils.setRoutingMode(leg, TransportMode.pt);
78  Route walkRoute = RouteUtils.createGenericRouteImpl(null, null);
79  walkRoute.setTravelTime(walkTime);
80  leg.setRoute(walkRoute);
81  legs.add(leg);
82  return legs;
83  }
final double getWalkTime(Person person, Coord coord, Coord toCoord)
Here is the call graph for this function:

◆ convertPassengerRouteToLegList()

List<Leg> org.matsim.pt.router.AbstractTransitRouter.convertPassengerRouteToLegList ( double  departureTime,
InternalTransitPassengerRoute  p,
Coord  fromCoord,
Coord  toCoord,
Person  person 
)
protectedinherited

Definition at line 116 of file AbstractTransitRouter.java.

References org.matsim.pt.router.AbstractTransitRouter.createAccessTransitWalkLeg(), org.matsim.pt.router.AbstractTransitRouter.createEgressTransitWalkLeg(), org.matsim.pt.router.AbstractTransitRouter.createTransferTransitWalkLeg(), org.matsim.pt.router.AbstractTransitRouter.createTransitLeg(), and org.matsim.pt.router.InternalTransitPassengerRoute.getRoute().

Referenced by org.matsim.pt.router.TransitRouterImpl.calcRoute().

116  {
117  // convert the route into a sequence of legs
118  List<Leg> legs = new ArrayList<>();
119 
120  // access leg
121  Leg accessLeg;
122  // check if first leg extends walking distance
123  if (p.getRoute().get(0).getRouteTaken() == null) {
124  // route starts with transfer - extend initial walk to that stop
125  //TODO: what if first leg extends the walking distance to more than first routeSegment i.e., (accessLeg, transfer, transfer ...). Amit Jan'18
126 // accessLeg = createTransitWalkLeg(fromCoord, p.getRoute().get(0).getToStop().getCoord());
127  accessLeg = createAccessTransitWalkLeg(fromCoord, p.getRoute().get(0));
128  p.getRoute().remove(0);
129  } else {
130  // do not extend it - add a regular walk leg
131  //
132 // accessLeg = createTransitWalkLeg(fromCoord, p.getRoute().get(0).getFromStop().getCoord());
133  accessLeg = createAccessTransitWalkLeg(fromCoord, p.getRoute().get(0));
134  }
135 
136  // egress leg
137  Leg egressLeg;
138  // check if first leg extends walking distance
139  if (p.getRoute().get(p.getRoute().size() - 1).getRouteTaken() == null) {
140  // route starts with transfer - extend initial walk to that stop
141 // egressLeg = createTransitWalkLeg(p.getRoute().get(p.getRoute().size() - 1).getFromStop().getCoord(), toCoord);
142  egressLeg = createEgressTransitWalkLeg(p.getRoute().get(p.getRoute().size() - 1), toCoord);
143  p.getRoute().remove(p.getRoute().size() - 1);
144  } else {
145  // do not extend it - add a regular walk leg
146  // access leg
147 // egressLeg = createTransitWalkLeg(p.getRoute().get(p.getRoute().size() - 1).getToStop().getCoord(), toCoord);
148  egressLeg = createEgressTransitWalkLeg(p.getRoute().get(p.getRoute().size() - 1), toCoord);
149  }
150 
151 
152  // add very first leg
153  legs.add(accessLeg);
154 
155  // route segments are now in pt-walk-pt sequence
156  for (RouteSegment routeSegement : p.getRoute()) {
157  if (routeSegement.getRouteTaken() == null) {// transfer
158  if (!routeSegement.fromStop.equals(routeSegement.toStop)) { // same to/from stop => no transfer. Amit Feb'18
159  legs.add(createTransferTransitWalkLeg(routeSegement));
160  }
161  } else {
162  // pt leg
163  legs.add(createTransitLeg(routeSegement));
164  }
165  }
166 
167  // add last leg
168  legs.add(egressLeg);
169 
170  return legs;
171  }
Leg createEgressTransitWalkLeg(RouteSegment routeSegement, Coord toCoord)
Leg createTransferTransitWalkLeg(RouteSegment routeSegement)
Leg createAccessTransitWalkLeg(Coord fromCoord, RouteSegment routeSegement)
Here is the call graph for this function:

◆ getConfig()

final TransitRouterConfig org.matsim.pt.router.AbstractTransitRouter.getConfig ( )
protectedinherited

◆ getWalkDisutility()

final double org.matsim.pt.router.AbstractTransitRouter.getWalkDisutility ( Person  person,
Coord  coord,
Coord  toCoord 
)
protectedinherited

◆ getTravelDisutility()

final TransitTravelDisutility org.matsim.pt.router.AbstractTransitRouter.getTravelDisutility ( )
protectedinherited

Member Data Documentation

◆ transitNetwork

final TransitRouterNetwork org.matsim.pt.router.TransitRouterImpl.transitNetwork
private

◆ travelTime

final TravelTime org.matsim.pt.router.TransitRouterImpl.travelTime
private

◆ travelDisutility

final TransitTravelDisutility org.matsim.pt.router.TransitRouterImpl.travelDisutility
private

◆ preparedTransitSchedule

final PreparedTransitSchedule org.matsim.pt.router.TransitRouterImpl.preparedTransitSchedule
private

◆ cacheTree

boolean org.matsim.pt.router.TransitRouterImpl.cacheTree
private

Definition at line 52 of file TransitRouterImpl.java.

◆ tree

TransitLeastCostPathTree org.matsim.pt.router.TransitRouterImpl.tree
private

Definition at line 53 of file TransitRouterImpl.java.

◆ previousFromFacility

Facility org.matsim.pt.router.TransitRouterImpl.previousFromFacility
private

Definition at line 54 of file TransitRouterImpl.java.

◆ previousDepartureTime

double org.matsim.pt.router.TransitRouterImpl.previousDepartureTime
private

The documentation for this class was generated from the following file: