private void writeTransitRoute(final TransitRoute route) throws UncheckedIOException { List<Tuple<String, String>> attributes = new ArrayList<Tuple<String, String>>(1); attributes.add(this.createTuple(Constants.ID, route.getId().toString())); this.writeStartTag(Constants.TRANSIT_ROUTE, attributes); if (route.getDescription() != null) { this.writeStartTag(Constants.DESCRIPTION, null); this.writeContent(route.getDescription(), false); this.writeEndTag(Constants.DESCRIPTION); } this.writeStartTag(Constants.TRANSPORT_MODE, null); this.writeContent(route.getTransportMode(), false); this.writeEndTag(Constants.TRANSPORT_MODE); this.writeRouteProfile(route.getStops()); this.writeRoute(route.getRoute()); this.writeDepartures(route.getDepartures()); this.writeEndTag(Constants.TRANSIT_ROUTE); }
int headway = (int) (transitRoute.getStops().get(transitRoute.getStops().size() - 1).getDepartureOffset() + this.driverRestTime) / numberOfVehicles; for (int i = 0; i < numberOfVehicles; i++) { for (double j = startTime + i * headway; j < endTime; ) { Departure departure = this.scheduleWithStopsOnly.getFactory().createDeparture(Id.create(n, Departure.class), j); departure.setVehicleId(Id.create(transitRoute.getId().toString() + "-" + i, Vehicle.class)); transitRoute.addDeparture(departure); j += transitRoute.getStops().get(transitRoute.getStops().size() - 1).getDepartureOffset() + this.driverRestTime; n++;
transitRoute.setDescription(this.currentTransitRoute.description); for (Departure departure : this.currentTransitRoute.departures.values()) { transitRoute.addDeparture(departure); AttributesUtils.copyTo(this.currentTransitRoute.attributes, transitRoute.getAttributes()); this.currentTransitLine.addRoute(transitRoute); this.currentTransitRoute = null;
public VehicleOccupancyCalculator(final TransitSchedule transitSchedule, final Vehicles vehicles, final int timeSlot, final int totalTime) { this.timeSlot = timeSlot; for(TransitLine line:transitSchedule.getTransitLines().values()) for(TransitRoute route:line.getRoutes().values()) { Map<Id<TransitStopFacility>, VehicleOccupancyData> routeMap = new HashMap<Id<TransitStopFacility>, VehicleOccupancyData>(100); vehicleOccupancy.put(new Tuple<Id<TransitLine>, Id<TransitRoute>>(line.getId(), route.getId()), routeMap); for(int s=0; s<route.getStops().size()-1; s++) { routeMap.put(route.getStops().get(s).getStopFacility().getId(), new VehicleOccupancyDataArray((int) (totalTime/timeSlot)+1)); } } this.vehicles = vehicles; }
private void createUmlaufStuecke() { this.umlaufStuecke = new ArrayList<>(); log.info("Generating UmlaufStuecke"); int cnt = 0; for (TransitLine line : transitLines) { for (TransitRoute route : line.getRoutes().values()) { Gbl.assertNotNull(route.getRoute()); // will fail much later if this is null. kai, may'17 for (Departure departure : route.getDepartures().values()) { UmlaufStueck umlaufStueck = new UmlaufStueck(line, route, departure); umlaufStuecke.add(umlaufStueck); cnt++; printStatus(cnt); } } } Collections.sort(this.umlaufStuecke, departureTimeComparator); }
for (TransitLine line : transitSchedule.getTransitLines().values()) for (TransitRoute route : line.getRoutes().values()) { double[] sortedDepartures = new double[route.getDepartures().size()]; int d = 0; for (Departure departure : route.getDepartures().values()) sortedDepartures[d++] = departure.getDepartureTime(); Arrays.sort(sortedDepartures); Map<String, WaitTimeData> stopsMap = new HashMap<String, WaitTimeData>(100); Map<String, double[]> stopsScheduledMap = new HashMap<String, double[]>(100); for (TransitRouteStop stop : route.getStops()) { stopsMap.put(stop.getStopFacility().getId().toString(), new WaitTimeDataArray((int) (totalTime / timeSlot) + 1)); double[] cacheWaitTimes = new double[(int) (totalTime / timeSlot) + 1]; Tuple<String, String> key = new Tuple<String, String>(line.getId().toString(), route.getId().toString()); waitTimes.put(key, stopsMap); scheduledWaitTimes.put(key, stopsScheduledMap);
public void testInitialization() { Id<TransitRoute> id = Id.create(9791, TransitRoute.class); Link fromLink = new FakeLink(Id.create(10, Link.class), null, null); Link toLink = new FakeLink(Id.create(5, Link.class), null, null); NetworkRoute route = RouteUtils.createLinkNetworkRouteImpl(fromLink.getId(), toLink.getId()); List<TransitRouteStop> stops = new ArrayList<TransitRouteStop>(); TransitRouteStop stop = new TransitRouteStopImpl(null, 50, 60); stops.add(stop); TransitRoute tRoute = createTransitRoute(id, route, stops, "train"); assertEquals("wrong id.", id.toString(), tRoute.getId().toString()); assertEquals("wrong route.", route, tRoute.getRoute()); assertEquals(stops.size(), tRoute.getStops().size()); assertEquals(stop, tRoute.getStops().get(0)); assertEquals("train", tRoute.getTransportMode()); }
public StopStopTimeCalculatorTuple(final TransitSchedule transitSchedule, final int timeSlot, final int totalTime) { this.timeSlot = timeSlot; Map<Tuple<Id<TransitStopFacility>, Id<TransitStopFacility>>, Integer> numObservations = new HashMap<Tuple<Id<TransitStopFacility>, Id<TransitStopFacility>>, Integer>(); for(TransitLine line:transitSchedule.getTransitLines().values()) for(TransitRoute route:line.getRoutes().values()) { for(int s=0; s<route.getStops().size()-1; s++) { Tuple<Id<TransitStopFacility>, Id<TransitStopFacility>> key = new Tuple<Id<TransitStopFacility>, Id<TransitStopFacility>>(route.getStops().get(s).getStopFacility().getId(), route.getStops().get(s+1).getStopFacility().getId()); StopStopTimeData data = stopStopTimes.get(key); if(data==null) stopStopTimes.put(key, new StopStopTimeDataArray((int) (totalTime/timeSlot)+1)); Double sTime = scheduledStopStopTimes.get(key); Integer num = numObservations.get(key); if(sTime==null) { sTime = 0.0; scheduledStopStopTimes.put(key, sTime); num = 0; numObservations.put(key, num); } scheduledStopStopTimes.put(key, (num*sTime+route.getStops().get(s+1).getArrivalOffset()-route.getStops().get(s).getDepartureOffset())/++num); numObservations.put(key, num); } for(Departure departure:route.getDepartures().values()) vehicleIds.add(departure.getVehicleId()); } System.out.println(stopStopTimes.size()); } public static void main(String[] args) {
NetworkRoute netRoute = route.getRoute(); if (netRoute == null) { result.addIssue(new ValidationResult.ValidationIssue(ValidationResult.Severity.ERROR, "Transit line " + line.getId() + ", route " + route.getId() + " has no network route.", ValidationResult.Type.OTHER, Collections.singleton(route.getId()))); } else { List<Id<Link>> linkIds = new ArrayList<>(); Id<Link> nextLinkId = linkIdIterator.next(); boolean error = false; for (TransitRouteStop stop : route.getStops()) { Id<Link> linkRefId = stop.getStopFacility().getLinkId(); nextLinkId = linkIdIterator.next(); } else { result.addIssue(new ValidationResult.ValidationIssue(ValidationResult.Severity.ERROR, "Transit line " + line.getId() + ", route " + route.getId() + ": Stop " + stop.getStopFacility().getId() + " cannot be reached along network route.", ValidationResult.Type.ROUTE_HAS_UNREACHABLE_STOP, Collections.singletonList(stop.getStopFacility().getId()))); error = true; break;
public void createNetwork() { List<Tuple<TransitLine, TransitRoute>> toBeRemoved = new LinkedList<Tuple<TransitLine, TransitRoute>>(); for (TransitLine tLine : this.schedule.getTransitLines().values()) { for (TransitRoute tRoute : tLine.getRoutes().values()) { ArrayList<Id<Link>> routeLinks = new ArrayList<Id<Link>>(); TransitRouteStop prevStop = null; for (TransitRouteStop stop : tRoute.getStops()) { Link link = getNetworkLink(prevStop, stop); routeLinks.add(link.getId()); prevStop = stop; } if (routeLinks.size() > 0) { NetworkRoute route = RouteUtils.createNetworkRoute(routeLinks, this.network); tRoute.setRoute(route); } else { System.err.println("Line " + tLine.getId() + " route " + tRoute.getId() + " has less than two stops. Removing this route from schedule."); toBeRemoved.add(new Tuple<TransitLine, TransitRoute>(tLine, tRoute)); } } } for (Tuple<TransitLine, TransitRoute> remove : toBeRemoved) { remove.getFirst().removeRoute(remove.getSecond()); } }
@Override public boolean removeRoute(final TransitRoute route) { return null != this.transitRoutes.remove(route.getId()); }
final void init() { if (getTransitRoute() != null) { this.stopIterator = getTransitRoute().getStops().listIterator(); this.nextStop = (stopIterator.hasNext() ? stopIterator.next() : null); } else { this.nextStop = null; } this.nextLinkIndex = 0; }
public void testReadFileV1() throws SAXException, ParserConfigurationException, IOException { final String inputDir = getClassInputDirectory(); Scenario scenario = ScenarioUtils.createScenario(ConfigUtils.createConfig()); Network network = scenario.getNetwork(); new MatsimNetworkReader(scenario.getNetwork()).readFile(inputDir + INPUT_TEST_FILE_NETWORK); TransitScheduleFactory builder = new TransitScheduleFactoryImpl(); TransitSchedule schedule = builder.createTransitSchedule(); new TransitScheduleReaderV1(schedule, scenario.getPopulation().getFactory().getRouteFactories()).readFile(inputDir + INPUT_TEST_FILE_TRANSITSCHEDULE); assertEquals("wrong number of transit lines.", 1, schedule.getTransitLines().size()); assertEquals("wrong line id.", Id.create("T1", TransitLine.class), schedule.getTransitLines().keySet().iterator().next()); TransitLine lineT1 = schedule.getTransitLines().get(Id.create("T1", TransitLine.class)); assertNotNull("could not find line with id T1.", lineT1); TransitRoute route1 = lineT1.getRoutes().get(Id.create("1", TransitRoute.class)); assertNotNull("could not find route 1 in line T1.", route1); Map<Id<Departure>, Departure> departures = route1.getDepartures(); assertNotNull("could not get departures of route 1 in line T1.", departures); assertEquals("wrong number of departures.", 3, departures.size()); List<TransitRouteStop> stops = route1.getStops(); assertNotNull("could not get transit route stops.", stops); assertEquals("wrong number of stops.", 6, stops.size()); NetworkRoute route = route1.getRoute(); assertNotNull("could not get route.", route); assertEquals("wrong start link.", network.getLinks().get(Id.create("1", Link.class)).getId(), route.getStartLinkId()); assertEquals("wrong end link.", network.getLinks().get(Id.create("8", Link.class)).getId(), route.getEndLinkId()); assertEquals("wrong number of links in route.", 4, route.getLinkIds().size()); }
for (Departure oldDeparture : transitRoute.getDepartures().values()) { Id<Departure> newDepartureId = Id.create("new_" + mergeDestination.getDepartures().values().size(), Departure.class); Departure newDeparture = transitScheduleFactory.createDeparture(newDepartureId, oldDeparture.getDepartureTime()); newDeparture.setVehicleId(oldDeparture.getVehicleId()); mergeDestination.addDeparture(newDeparture);
NetworkRoute netRoute = route.getRoute(); if (netRoute == null) { result.addIssue(new ValidationResult.ValidationIssue(ValidationResult.Severity.ERROR, "Transit line " + line.getId() + ", route " + route.getId() + " has no network route.", ValidationResult.Type.OTHER, Collections.singleton(route.getId()))); } else { Link prevLink = network.getLinks().get(netRoute.getStartLinkId()); Link link = network.getLinks().get(linkId); if (link == null) { result.addIssue(new ValidationResult.ValidationIssue(ValidationResult.Severity.ERROR, "Transit line " + line.getId() + ", route " + route.getId() + " contains a link that is not part of the network: " + linkId, ValidationResult.Type.OTHER, Collections.singleton(route.getId()))); } else if (prevLink != null && !prevLink.getToNode().equals(link.getFromNode())) { result.addIssue(new ValidationResult.ValidationIssue(ValidationResult.Severity.ERROR, "Transit line " + line.getId() + ", route " + route.getId() + " has inconsistent network route, e.g. between link " + prevLink.getId() + " and " + linkId, ValidationResult.Type.OTHER, Collections.singleton(route.getId())));
/** * Lazy initialization, as the vehicle info may not be available from the beginning. */ private void collectHeadingsInfo() { Map<Id, Departure> map = new HashMap<Id, Departure>(this.transitRoute.getDepartures().size()*2); for (Departure departure : this.transitRoute.getDepartures().values()) { if (departure.getVehicleId() != null) { map.put(departure.getVehicleId(), departure); } } /* try to make it thread-safe by assigning class-member at the end. * if two threads enter this method, nothing bad should happen, * as both threads should generated the same initialization. */ this.headings = map; }
this.redLine.addRoute(route); route.addDeparture(this.builder.createDeparture(Id.create("r>01", Departure.class), 6.0*3600)); route.addDeparture(this.builder.createDeparture(Id.create("r>02", Departure.class), 7.0*3600)); route.addDeparture(this.builder.createDeparture(Id.create("r>03", Departure.class), 8.0*3600)); route.addDeparture(this.builder.createDeparture(Id.create("r>04", Departure.class), 9.0*3600)); this.redLine.addRoute(route); route.addDeparture(this.builder.createDeparture(Id.create("r<01", Departure.class), 6.0*3600 + 10.0*60)); route.addDeparture(this.builder.createDeparture(Id.create("r<02", Departure.class), 7.0*3600 + 10.0*60)); route.addDeparture(this.builder.createDeparture(Id.create("r<03", Departure.class), 8.0*3600 + 10.0*60)); route.addDeparture(this.builder.createDeparture(Id.create("r<04", Departure.class), 9.0*3600 + 10.0*60));
public void testRemoveDepartures() { Fixture f = new Fixture(); Departure dep1 = new DepartureImpl(Id.create(1, Departure.class), 7.0*3600); Departure dep2 = new DepartureImpl(Id.create(2, Departure.class), 8.0*3600); f.tRoute.addDeparture(dep1); f.tRoute.addDeparture(dep2); assertEquals(2, f.tRoute.getDepartures().size()); assertNotNull(f.tRoute.getDepartures().get(dep1.getId())); assertNotNull(f.tRoute.getDepartures().get(dep2.getId())); assertTrue(f.tRoute.removeDeparture(dep1)); assertEquals(1, f.tRoute.getDepartures().size()); assertNull(f.tRoute.getDepartures().get(dep1.getId())); assertNotNull(f.tRoute.getDepartures().get(dep2.getId())); assertTrue(f.tRoute.removeDeparture(dep2)); assertEquals(0, f.tRoute.getDepartures().size()); f.tRoute.addDeparture(dep1); assertEquals(1, f.tRoute.getDepartures().size()); assertFalse(f.tRoute.removeDeparture(dep2)); assertEquals(1, f.tRoute.getDepartures().size()); assertNotNull(f.tRoute.getDepartures().get(dep1.getId())); }
@Override public NetworkRoute getCarRoute() { return route.getRoute(); }
TransitRoute route1a = f.createTransitRoute(Id.create("upwards", TransitRoute.class), netRoute, stops, "elevator"); route1a.getAttributes().putAttribute("bidirectional", false); route1a.addDeparture(dep1); route1a.addDeparture(dep2); Assert.assertFalse(AttributesUtils.isEmpty(route1.getAttributes())); Assert.assertTrue(route1.getAttributes().getAttribute("bidirectional") instanceof Boolean); Assert.assertFalse((Boolean) route1.getAttributes().getAttribute("bidirectional")); Departure dep1 = route1.getDepartures().get(Id.create("first", Departure.class)); Assert.assertNotNull(dep1); Assert.assertFalse(AttributesUtils.isEmpty(dep1.getAttributes())); Assert.assertEquals("yes", dep1.getAttributes().getAttribute("early")); Departure dep2 = route1.getDepartures().get(Id.create("last", Departure.class)); Assert.assertNotNull(dep2); Assert.assertTrue(AttributesUtils.isEmpty(dep2.getAttributes()));