@Override
public Path calcLeastCostPath(final Node fromNode, final Node toNode, final double startTime, final Person person, final Vehicle vehicle) {
this.fastRouter.initialize();
this.routingNetwork.initialize();
Node routingNetworkFromNode;
Node routingNetworkToNode;
if (fromNode instanceof ImaginaryNode) {
Collection<? extends InitialNode> initialNodes = ((ImaginaryNode) fromNode).initialNodes;
for (InitialNode initialNode : initialNodes) initialNode.node = routingNetwork.getNodes().get(initialNode.node.getId());
routingNetworkFromNode = fromNode;
} else routingNetworkFromNode = routingNetwork.getNodes().get(fromNode.getId());
if (toNode instanceof ImaginaryNode) {
Collection<? extends InitialNode> initialNodes = ((ImaginaryNode) toNode).initialNodes;
for (InitialNode initialNode : initialNodes) initialNode.node = routingNetwork.getNodes().get(initialNode.node.getId());
routingNetworkToNode = toNode;
} else routingNetworkToNode = routingNetwork.getNodes().get(toNode.getId());
return super.calcLeastCostPath(routingNetworkFromNode, routingNetworkToNode, startTime, person, vehicle);
}