private void cleanSchedule() { for (TransitLine line : this.schedule.getTransitLines().values()) { Set<TransitRoute> toRemove = new HashSet<>(); for (TransitRoute transitRoute : line.getRoutes().values()) { boolean removeRoute = false; NetworkRoute networkRoute = transitRoute.getRoute(); if (networkRoute.getStartLinkId() == null || networkRoute.getEndLinkId() == null) { removeRoute = true; } for (Id<Link> linkId : transitRoute.getRoute().getLinkIds()) { if (linkId == null) { removeRoute = true; } } if (removeRoute) { log.error( "NetworkRoute for " + transitRoute.getId().toString() + " incomplete. Remove route."); toRemove.add(transitRoute); } } if (!toRemove.isEmpty()) { for (TransitRoute transitRoute : toRemove) { line.removeRoute(transitRoute); } } } }
/** * By applying a routing algorithm (e.g. shortest path or OSM-extraction) route from station to * station for each pt-line. * * <p>Writes the resulting schedule into this.schedule. */ protected void createPTRoutes() { log.info("Creating pt routes..."); Counter counter = new Counter("route # "); this.router = new PTLRFastAStarLandmarksSimpleRouting(this.network); for (TransitLine line : this.schedule.getTransitLines().values()) { for (TransitRoute route : line.getRoutes().values()) { counter.incCounter(); assignRoute(route); } } counter.printCounter(); log.info(" Add artificial links and nodes..."); for (ArtificiallyConnectedStopFacility newFacility : artificiallyConnectedStopFacilities.values()) { this.network.addNode(newFacility.myNode); } for (ArtificiallyConnectedStopFacility newFacility : artificiallyConnectedStopFacilities.values()) { this.network.addLink(newFacility.myLink); for (Link newLink : newFacility.getLinks()) { this.network.addLink(newLink); } } for (Link newLink : artificiallyAddedLinks.values()) { this.network.addLink(newLink); } log.info(" Add artificial links and nodes... done."); log.info("Creating pt routes... done."); }
private void removeNonUsedStopFacilities() { // Collect all used stop facilities: Set<Id<TransitStopFacility>> usedStopFacilities = new HashSet<>(); for (TransitLine line : this.schedule.getTransitLines().values()) { for (TransitRoute route : line.getRoutes().values()) { for (TransitRouteStop stop : route.getStops()) { usedStopFacilities.add(stop.getStopFacility().getId()); } } } // Check all stop facilities if not used: Set<TransitStopFacility> unusedStopFacilites = new HashSet<>(); for (Id<TransitStopFacility> facilityId : this.schedule.getFacilities().keySet()) { if (!usedStopFacilities.contains(facilityId)) { unusedStopFacilites.add(this.schedule.getFacilities().get(facilityId)); } } // Remove all stop facilities not used: for (TransitStopFacility facility : unusedStopFacilites) { this.schedule.removeStopFacility(facility); } }
/** * Add to any link that is passed by any route a "pt" in the modes, if it hasn't already one... */ private void prepareNetwork() { Map<Id<Link>, ? extends Link> networkLinks = network.getLinks(); Set<Id<Link>> transitLinks = new HashSet<>(); for (TransitLine line : this.schedule.getTransitLines().values()) { for (TransitRoute transitRoute : line.getRoutes().values()) { NetworkRoute networkRoute = transitRoute.getRoute(); transitLinks.add(networkRoute.getStartLinkId()); for (Id<Link> linkId : transitRoute.getRoute().getLinkIds()) { transitLinks.add(linkId); } transitLinks.add(networkRoute.getEndLinkId()); } } for (Id<Link> transitLinkId : transitLinks) { Link transitLink = networkLinks.get(transitLinkId); if (!transitLink.getAllowedModes().contains(TransportMode.pt)) { Set<String> modes = new HashSet<>(); modes.addAll(transitLink.getAllowedModes()); modes.add(TransportMode.pt); transitLink.setAllowedModes(modes); } } }