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); } } } }
private Set<Link> getLinksWithinSearchRadius(Coord centralCoords) { Set<Link> linksWithinRadius = new HashSet<>(); for (Link link : this.network.getLinks().values()) { if (NetworkUtils.getEuclidianDistance(centralCoords, link.getToNode().getCoord()) < SEARCH_RADIUS) { linksWithinRadius.add(link); } } return linksWithinRadius; }
/** * Link the pt-stations in the schedule to the closest network links. Thereby modifies * this.schedule. */ protected void linkStationsToNetwork() { log.info("Linking pt stations to network..."); Counter counter = new Counter("route # "); Set<TransitStopFacility> newFacilities = new HashSet<>(); for (TransitStopFacility facility : this.schedule.getFacilities().values()) { final Id<Link> closestLink = findClosestLink(facility); if (closestLink != null) { // link stop-facilities to the respective links. List<Id<TransitStopFacility>> localLinkedFacilities = new ArrayList<>(); facility.setLinkId(closestLink); localLinkedFacilities.add(facility.getId()); // if street-link has opposite direction or if we searched for all links in area, then split // stop-position before linking. final List<Id<Link>> oppositeDirectionLinks = getOppositeDirection(closestLink); if (oppositeDirectionLinks != null && !oppositeDirectionLinks.isEmpty()) { TransitStopFacility[] newStopFacilities = multiplyStop(facility, oppositeDirectionLinks.size()); for (int i = 0; i < oppositeDirectionLinks.size(); i++) { newStopFacilities[i + 1].setLinkId(oppositeDirectionLinks.get(i)); localLinkedFacilities.add(newStopFacilities[i + 1].getId()); newFacilities.add(newStopFacilities[i + 1]); } } linkedStopFacilitiesTree.put(facility.getId(), localLinkedFacilities); } counter.incCounter(); } for (TransitStopFacility facility : newFacilities) { this.schedule.addStopFacility(facility); } counter.printCounter(); log.info("Linking pt stations to network... done."); for (List<Id<TransitStopFacility>> facilityList : linkedStopFacilitiesTree.values()) { for (Id<TransitStopFacility> facilityId : facilityList) { linkedStopFacilities.add(facilityId); } } }
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); } } }
private void setConnectedStopFacilitiesToIsBlocking() { Set<TransitStopFacility> facilitiesToExchange = new HashSet<>(); for (TransitStopFacility oldFacility : this.schedule.getFacilities().values()) { if (this.network .getLinks() .get(oldFacility.getLinkId()) .getAllowedModes() .contains(TransportMode.car)) { TransitStopFacility newFacility = this.scheduleFactory.createTransitStopFacility( oldFacility.getId(), oldFacility.getCoord(), true); newFacility.setName(oldFacility.getName()); newFacility.setLinkId(oldFacility.getLinkId()); newFacility.setStopPostAreaId(oldFacility.getStopPostAreaId()); facilitiesToExchange.add(newFacility); } } for (TransitStopFacility facility : facilitiesToExchange) { TransitStopFacility facilityToRemove = this.schedule.getFacilities().get(facility.getId()); this.schedule.removeStopFacility(facilityToRemove); this.schedule.addStopFacility(facility); } }