21 package org.matsim.core.router;
23 import java.util.Collection;
24 import java.util.Iterator;
64 super(routingNetwork, costFunction, timeFunction, preProcessData, searchAllEndNodes);
66 this.routingNetwork = routingNetwork;
69 this.nodeData.clear();
79 this.fastRouter.initialize();
82 Node routingNetworkFromNode;
83 Node routingNetworkToNode;
86 Collection<? extends InitialNode> initialNodes = ((ImaginaryNode) fromNode).initialNodes;
87 for (
InitialNode initialNode : initialNodes) initialNode.node = routingNetwork.
getNodes().get(initialNode.node.getId());
88 routingNetworkFromNode = fromNode;
89 }
else routingNetworkFromNode = routingNetwork.
getNodes().get(fromNode.
getId());
91 if (toNode instanceof ImaginaryNode) {
92 Collection<? extends InitialNode> initialNodes = ((ImaginaryNode) toNode).initialNodes;
93 for (
InitialNode initialNode : initialNodes) initialNode.node = routingNetwork.
getNodes().get(initialNode.node.getId());
94 routingNetworkToNode = toNode;
95 }
else routingNetworkToNode = routingNetwork.
getNodes().get(toNode.
getId());
97 return super.calcLeastCostPath(routingNetworkFromNode, routingNetworkToNode, startTime, person, vehicle);
107 int size = this.routingNetwork.
getNodes().size();
108 if (this.heap == null || this.maxSize != size) {
119 return super.createRouterPriorityQueue();
137 if (fromNode instanceof
ImaginaryNode) imaginaryNode = (ImaginaryNode) fromNode;
140 if (!(toNode instanceof RoutingNetworkNode)) toNode = this.routingNetwork.
getNodes().get(toNode.
getId());
142 Path path = this.fastRouter.constructPath(fromNode, toNode, startTime, arrivalTime);
150 if (imaginaryNode != null && path != null && path.
nodes.size() > 0) {
152 double initialCost = 0.0;
153 double initialTime = 0.0;
155 Iterator<? extends InitialNode> iter = imaginaryNode.initialNodes.iterator();
156 while (iter.hasNext()) {
177 if (toNode == null || fromNode == null)
return null;
179 if (!(toNode instanceof RoutingNetworkNode)) toNode = this.routingNetwork.
getNodes().get(toNode.
getId());
180 return super.constructPath(fromNode, toNode, startTime);
190 fastRouter.relaxNode(outNode, toNode, pendingNodes);
206 return fastRouter.getPreProcessData(n);
DijkstraNodeData getData(final Node n)
FastMultiNodeDijkstra(final RoutingNetwork routingNetwork, final TravelDisutility costFunction, final TravelTime timeFunction, final PreProcessDijkstra preProcessData, final FastRouterDelegateFactory fastRouterFactory, boolean searchAllEndNodes)
Map< Id< Node >, RoutingNetworkNode > getNodes()
PreProcessDijkstra.DeadEndData getPreProcessData(final Node n)
void relaxNode(final Node outNode, final Node toNode, final RouterPriorityQueue< Node > pendingNodes)
final PreProcessDijkstra preProcessData
final TravelDisutility costFunction
final TravelTime timeFunction
BinaryMinHeap< ArrayRoutingNetworkNode > heap
Path constructPath(Node fromNode, Node toNode, double startTime)
final FastRouterDelegate fastRouter
Path constructPath(Node fromNode, Node toNode, double startTime, double arrivalTime)
FastRouterDelegate createFastRouterDelegate(Dijkstra dijkstra, NodeDataFactory nodeDataFactory, RoutingNetwork routingNetwork)
boolean searchAllEndNodes
Path calcLeastCostPath(final Node fromNode, final Node toNode, final double startTime, final Person person, final Vehicle vehicle)