@Override public TransitRouteStop getStop(final TransitStopFacility stop) { for (TransitRouteStop trStop : this.stops) { if (stop == trStop.getStopFacility()) { return trStop; } } return null; }
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]; for (int i = 0; i < cacheWaitTimes.length; i++) { SORTED_DEPARTURES: for (double departure : sortedDepartures) { double arrivalTime = departure + (stop.getArrivalOffset() != Time.UNDEFINED_TIME ? stop.getArrivalOffset() : stop.getDepartureOffset()); if (arrivalTime >= endTime) { cacheWaitTimes[i] = arrivalTime - endTime; cacheWaitTimes[i] = sortedDepartures[0] + 24 * 3600 + (stop.getArrivalOffset() != Time.UNDEFINED_TIME ? stop.getArrivalOffset() : stop.getDepartureOffset()) - endTime; stopsScheduledMap.put(stop.getStopFacility().getId().toString(), cacheWaitTimes);
private void writeRouteProfile(final List<TransitRouteStop> stops) throws UncheckedIOException { this.writeStartTag(Constants.ROUTE_PROFILE, null); // optimization: only create one List for multiple departures List<Tuple<String, String>> attributes = new ArrayList<>(4); for (TransitRouteStop stop : stops) { attributes.clear(); attributes.add(createTuple(Constants.REF_ID, stop.getStopFacility().getId().toString())); if (stop.getArrivalOffset() != Time.UNDEFINED_TIME) { attributes.add(createTimeTuple(Constants.ARRIVAL_OFFSET, stop.getArrivalOffset())); } if (stop.getDepartureOffset() != Time.UNDEFINED_TIME) { attributes.add(createTimeTuple(Constants.DEPARTURE_OFFSET, stop.getDepartureOffset())); } attributes.add(createTuple(Constants.AWAIT_DEPARTURE, String.valueOf(stop.isAwaitDepartureTime()))); this.writeStartTag(Constants.STOP, attributes, true); } this.writeEndTag(Constants.ROUTE_PROFILE); }
protected double longerStopTimeIfWeAreAheadOfSchedule(final double now, final double stopTime) { if ((this.nextStop.isAwaitDepartureTime()) && (this.nextStop.getDepartureOffset() != Time.UNDEFINED_TIME)) { double earliestDepTime = getActivityEndTime() + this.nextStop.getDepartureOffset(); if (now + stopTime < earliestDepTime) { return earliestDepTime - now; } } return stopTime; }
public double getVehArrivalTime(final Link link, final double now){ if ((link == this.previousWaitLink) && (now == this.previousWaitTime)) { return this.cachedVehArrivalTime; } this.previousWaitLink = link; this.previousWaitTime = now; //first find out vehicle arrival time to fromStop according to transit schedule TransitRouterNetworkLink wrapped = (TransitRouterNetworkLink) link; if (wrapped.getRoute() == null) { throw new RuntimeException("should not happen") ; } TransitRouteStop fromStop = wrapped.fromNode.stop; double nextDepartureTime = preparedTransitSchedule.getNextDepartureTime(wrapped.getRoute(), fromStop, now); double fromStopArrivalOffset = (fromStop.getArrivalOffset() != Time.UNDEFINED_TIME) ? fromStop.getArrivalOffset() : fromStop.getDepartureOffset(); double vehWaitAtStopTime = fromStop.getDepartureOffset() - fromStopArrivalOffset; //time in which the veh stops at station double vehArrivalTime = nextDepartureTime - vehWaitAtStopTime; cachedVehArrivalTime = vehArrivalTime ; return vehArrivalTime ; }
private double getDepartureOffsetFromRoute(TransitRoute transitRoute, Id<TransitStopFacility> accessStopId) { for (TransitRouteStop routeStop : transitRoute.getStops()) { if (accessStopId.equals(routeStop.getStopFacility().getId())) { return routeStop.getDepartureOffset(); } } log.error("Stop " + accessStopId + " not found in route " + transitRoute.getId()); // returning what??? return -1.0; }
private double getArrivalOffsetFromRoute(TransitRoute transitRoute, Id<TransitStopFacility> egressStopId) { for (TransitRouteStop routeStop : transitRoute.getStops()) { if (egressStopId.equals(routeStop.getStopFacility().getId())) { return routeStop.getArrivalOffset(); } } log.error("Stop " + egressStopId + " not found in route " + transitRoute.getId()); // returning what??? return -1.0; }
private Link getNetworkLink(final TransitRouteStop fromStop, final TransitRouteStop toStop) { TransitStopFacility fromFacility = (fromStop == null) ? toStop.getStopFacility() : fromStop.getStopFacility(); TransitStopFacility toFacility = toStop.getStopFacility(); this.nodes.put(newFacility, toNode); this.schedule.addStopFacility(newFacility); toStop.setStopFacility(newFacility); this.stopFacilities.put(connection, newFacility); toStop.setStopFacility(this.stopFacilities.get(connection));
public double getNextDepartureTime(final TransitRoute route, final TransitRouteStop stop, final double depTime) { double earliestDepartureTimeAtTerminus = depTime - stop.getDepartureOffset(); bestDepartureTime += stop.getDepartureOffset();
public void testAwaitDepartureTime() { TransitStopFacility stopFacility = new TransitStopFacilityImpl(Id.create(1, TransitStopFacility.class), new Coord((double) 2, (double) 3), false); double arrivalDelay = 4; double departureDelay = 5; TransitRouteStop routeStop = createTransitRouteStop(stopFacility, arrivalDelay, departureDelay); assertFalse(routeStop.isAwaitDepartureTime()); routeStop.setAwaitDepartureTime(true); assertTrue(routeStop.isAwaitDepartureTime()); routeStop.setAwaitDepartureTime(false); assertFalse(routeStop.isAwaitDepartureTime()); }
assertEquals(3, route.getStops().size()); TransitRouteStop stop1 = route.getStops().get(0); assertEquals(false, stop1.isAwaitDepartureTime()); TransitRouteStop stop2 = route.getStops().get(1); assertEquals(true, stop2.isAwaitDepartureTime()); TransitRouteStop stop3 = route.getStops().get(2); assertEquals(false, stop3.isAwaitDepartureTime());
if (stop.getStopFacility().getId().equals(stopId)) { facilityOffsets.add(stop.getDepartureOffset());
private void processEventVehicleArrives(final TransitStopFacility stop, final double now) { if (this.currentStop == null) { this.currentStop = this.nextStop; double delay = now - this.getDeparture().getDepartureTime(); if (! ( Double.isNaN(this.currentStop.getArrivalOffset()) && Double.isInfinite(this.currentStop.getArrivalOffset())) ){ delay = delay - this.currentStop.getArrivalOffset(); } else if (! (Double.isNaN(this.currentStop.getDepartureOffset()) && Double.isInfinite(this.currentStop.getDepartureOffset()))) { delay = delay - this.currentStop.getDepartureOffset(); } else { log.warn("Could not calculate delay!"); } eventsManager.processEvent(new VehicleArrivesAtFacilityEvent(now, this.vehicle.getVehicle().getId(), stop.getId(), delay)); } }
public void testStopFacility() { TransitStopFacility stopFacility1 = new TransitStopFacilityImpl(Id.create(1, TransitStopFacility.class), new Coord((double) 2, (double) 3), false); TransitStopFacility stopFacility2 = new TransitStopFacilityImpl(Id.create(2, TransitStopFacility.class), new Coord((double) 3, (double) 4), false); double arrivalDelay = 4; double departureDelay = 5; TransitRouteStop routeStop = createTransitRouteStop(stopFacility1, arrivalDelay, departureDelay); assertEquals(stopFacility1, routeStop.getStopFacility()); routeStop.setStopFacility(stopFacility2); assertEquals(stopFacility2, routeStop.getStopFacility()); }
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.setVehicleId(Id.create(transitRoute.getId().toString() + "-" + i, Vehicle.class)); transitRoute.addDeparture(departure); j += transitRoute.getStops().get(transitRoute.getStops().size() - 1).getDepartureOffset() + this.driverRestTime; n++;
@Override public final TransitStopFacility getNextTransitStop() { if (this.nextStop == null) { return null; } return this.nextStop.getStopFacility(); }
Map<Id<TransitStopFacility>, double[]> stopsScheduledMap = new HashMap<Id<TransitStopFacility>, double[]>(100); for(TransitRouteStop stop:route.getStops()) { stopsMap.put(stop.getStopFacility().getId(), new WaitTimeDataArray(totalTime/timeSlot+1)); double[] cacheWaitTimes = new double[totalTime/timeSlot+1]; for(int i=0; i<cacheWaitTimes.length; i++) { SORTED_DEPARTURES: for(double departure:sortedDepartures) { double arrivalTime = departure+(stop.getArrivalOffset()!=Time.UNDEFINED_TIME?stop.getArrivalOffset():stop.getDepartureOffset()); if(arrivalTime>=endTime) { cacheWaitTimes[i] = arrivalTime-endTime; cacheWaitTimes[i] = sortedDepartures[0]+24*3600+(stop.getArrivalOffset()!=Time.UNDEFINED_TIME?stop.getArrivalOffset():stop.getDepartureOffset())-endTime; stopsScheduledMap.put(stop.getStopFacility().getId(), cacheWaitTimes);
private void writeRouteProfile(final List<TransitRouteStop> stops) throws UncheckedIOException { this.writeStartTag(Constants.ROUTE_PROFILE, null); // optimization: only create one List for multiple departures List<Tuple<String, String>> attributes = new ArrayList<Tuple<String, String>>(4); for (TransitRouteStop stop : stops) { attributes.clear(); attributes.add(this.createTuple(Constants.REF_ID, stop.getStopFacility().getId().toString())); if (stop.getArrivalOffset() != Time.UNDEFINED_TIME) { attributes.add(this.createTimeTuple(Constants.ARRIVAL_OFFSET, stop.getArrivalOffset())); } if (stop.getDepartureOffset() != Time.UNDEFINED_TIME) { attributes.add(this.createTimeTuple(Constants.DEPARTURE_OFFSET, stop.getDepartureOffset())); } attributes.add(this.createTuple(Constants.AWAIT_DEPARTURE, String.valueOf(stop.isAwaitDepartureTime()))); this.writeStartTag(Constants.STOP, attributes, true); } this.writeEndTag(Constants.ROUTE_PROFILE); }
public static ValidationResult validateAllStopsExist(final TransitSchedule schedule) { ValidationResult result = new ValidationResult(); for (TransitLine line : schedule.getTransitLines().values()) { for (TransitRoute route : line.getRoutes().values()) { for (TransitRouteStop stop : route.getStops()) { if (stop.getStopFacility() == null) { result.addIssue(new ValidationResult.ValidationIssue(ValidationResult.Severity.ERROR, "Transit line " + line.getId() + ", route " + route.getId() + " contains a stop (dep-offset=" + stop.getDepartureOffset() + ") without stop-facility. Most likely, a wrong id was specified in the file.", ValidationResult.Type.HAS_MISSING_STOP_FACILITY, Collections.singletonList(route.getId()))); } else if (schedule.getFacilities().get(stop.getStopFacility().getId()) == null) { result.addIssue(new ValidationResult.ValidationIssue(ValidationResult.Severity.ERROR, "Transit line " + line.getId() + ", route " + route.getId() + " contains a stop (stop-facility " + stop.getStopFacility().getId() + ") that is not contained in the list of all stop facilities.", ValidationResult.Type.HAS_MISSING_STOP_FACILITY, Collections.singletonList(route.getId()))); } } } } return result; }
double arrivalOffset = (toStop.getArrivalOffset() != Time.UNDEFINED_TIME) ? toStop.getArrivalOffset() : toStop.getDepartureOffset(); double time2 = (bestDepartureTime - time) + (arrivalOffset - fromStop.getDepartureOffset()); if (time2 < 0) {