@Override public TripRouter instantiateAndConfigureTripRouter(RoutingContext routingContext) { TripRouter instance = this.delegateFactory.instantiateAndConfigureTripRouter(routingContext); Network network = this.scenario.getNetwork(); PopulationFactory populationFactory = this.scenario.getPopulation().getFactory(); ModeRouteFactory modeRouteFactory = ((PopulationFactoryImpl) populationFactory).getModeRouteFactory(); MultiModalConfigGroup multiModalConfigGroup = (MultiModalConfigGroup) scenario.getConfig().getModule(MultiModalConfigGroup.GROUP_NAME); Set<String> simulatedModes = CollectionUtils.stringToSet(multiModalConfigGroup.getSimulatedModes()); for (String mode : simulatedModes) { if (instance.getRegisteredModes().contains(mode)) { log.warn("A routing algorithm for " + mode + " is already registered. It is replaced!"); } TravelTime travelTime = this.multimodalTravelTimes.get(mode); if (travelTime == null) { throw new RuntimeException( "No travel time object was found for mode " + mode + "! Aborting."); } Network subNetwork = multimodalSubNetworks.get(mode); if (subNetwork == null) { subNetwork = NetworkImpl.createNetwork(); Set<String> restrictions = new HashSet<>(); restrictions.add(mode); TransportModeNetworkFilter networkFilter = new TransportModeNetworkFilter(network); networkFilter.filter(subNetwork, restrictions); this.multimodalSubNetworks.put(mode, subNetwork); } /* * We cannot use the travel disutility object from the routingContext since it * has not been created for the modes used here. */ TravelDisutility travelDisutility = this.travelDisutilityFactory.createTravelDisutility( travelTime, scenario.getConfig().planCalcScore()); LeastCostPathCalculator routeAlgo = this.leastCostPathCalculatorFactory.createPathCalculator( subNetwork, travelDisutility, travelTime); RoutingModule legRouterWrapper = DefaultRoutingModules.createNetworkRouter(mode, populationFactory, subNetwork, routeAlgo); instance.setRoutingModule(mode, legRouterWrapper); } return instance; }
@Override public TripRouter instantiateAndConfigureTripRouter(RoutingContext routingContext) { // TODO Auto-generated method stub final TripRouter router = delegate.instantiateAndConfigureTripRouter(routingContext); // add our module to the instance router.setRoutingModule("movingpathways", new AAMRoutingModule(this.scenario)); /* router.setRoutingModule(TransportMode.pt, new TransitMultiModalAccessRoutingModule( scenario, new InitialNodeRouter( router.getRoutingModule( "movingpathways" ), scenario.getConfig().transitRouter().getSearchRadius(), 1, scoringParams ) ) ); */ final MainModeIdentifier defaultModeIdentifier = router.getMainModeIdentifier(); router.setMainModeIdentifier( new MainModeIdentifier() { @Override public String identifyMainMode(final List<? extends PlanElement> tripElements) { boolean hadMovingPathway = false; for (PlanElement pe : tripElements) { if (pe instanceof Leg) { final Leg l = (Leg) pe; if (l.getMode().equals("movingpathways")) { hadMovingPathway = true; } if (l.getMode().equals(TransportMode.transit_walk)) { return TransportMode.pt; } } } if (hadMovingPathway) { // there were bike sharing legs but no transit walk return "movingpathways"; } return defaultModeIdentifier.identifyMainMode(tripElements); } }); return router; }
@Override public TripRouter get() { final TripRouter tripRouter = defaultFactory.get(); final TransitRouterWrapper routingModule = new TransitRouterWrapper( transitRouterFactory.get(), scenario.getTransitSchedule(), scenario.getNetwork(), // use a walk router in case no PT path is found DefaultRoutingModules.createTeleportationRouter( TransportMode.transit_walk, scenario.getPopulation().getFactory(), scenario .getConfig() .plansCalcRoute() .getModeRoutingParams() .get(TransportMode.walk))); tripRouter.setRoutingModule(TransportMode.pt, routingModule); return tripRouter; }