public static void copyFromTo(Leg in, Leg out) { out.setMode( in.getMode() ); out.setDepartureTime(in.getDepartureTime()); out.setTravelTime(in.getTravelTime()); if (in.getRoute() != null) { out.setRoute(in.getRoute().clone()); } AttributesUtils.copyAttributesFromTo( in , out ); }
@Override public void handleLeg(Leg leg) { startTime = leg.getDepartureTime(); score = score - (leg.getDepartureTime() + leg.getTravelTime() - startTime); startTime = Double.NaN; }
private static void fillInLegTravelTimes( final double departureTime, final List<? extends PlanElement> trip ) { double time = departureTime; for ( PlanElement pe : trip ) { if ( !(pe instanceof Leg) ) continue; final Leg leg = (Leg) pe; if ( leg.getDepartureTime() == Time.UNDEFINED_TIME ) { leg.setDepartureTime( time ); } if ( leg.getTravelTime() == Time.UNDEFINED_TIME ) { leg.setTravelTime( leg.getRoute().getTravelTime() ); } time += leg.getTravelTime(); } }
/** * Removes the specified leg <b>and</b> the following act, too! If the following act is not the last one, * the following leg will be emptied to keep consistency (i.e. for the route) * * @param index */ public final void removeLeg(final int index) { if ((index % 2 == 0) || (index < 1) || (index >= getPlanElements().size() - 1)) { log.warn(this + "[index=" + index + " is wrong. nothing removed]"); } else { if (index != getPlanElements().size() - 2) { // not the last leg Leg next_leg = (Leg) getPlanElements().get(index + 2); next_leg.setDepartureTime(Time.UNDEFINED_TIME); next_leg.setTravelTime(Time.UNDEFINED_TIME); next_leg.setTravelTime( Time.UNDEFINED_TIME - next_leg.getDepartureTime() ); next_leg.setRoute(null); } getPlanElements().remove(index + 1); // following act getPlanElements().remove(index); // leg } }
Id<Person> person1Id = person1.getId(); Leg leg = PopulationUtils.createLeg(TransportMode.car); leg.setDepartureTime(7*3600); leg.setTravelTime(Time.UNDEFINED_TIME); leg.setTravelTime( Time.UNDEFINED_TIME - leg.getDepartureTime() ); histo.handleEvent(new PersonDepartureEvent(7*3600, person1Id, linkId, leg.getMode())); histo.handleEvent(new PersonArrivalEvent(7*3600 + 6*60, person1Id, linkId, leg.getMode())); leg.setMode("train"); histo.handleEvent(new PersonDepartureEvent(8*3600, person1Id, linkId, leg.getMode())); histo.handleEvent(new PersonArrivalEvent(8*3600 + 11*60, person1Id, linkId, leg.getMode()));
public LegSerializable(Leg leg) { departureTime = leg.getDepartureTime(); mode = leg.getMode(); travelTime = leg.getTravelTime(); if (leg.getRoute() != null) { if (leg.getMode().equals(TransportMode.car)) route = new NetworkRouteSerializable((NetworkRoute) leg.getRoute()); else route = new GenericRouteSerializable(leg.getRoute()); } }
private void processAllocation(final List<SubtourRecord> vehicularTours) { for ( final SubtourRecord r : vehicularTours ) { for ( final Trip t : r.subtour.getTrips() ) { for ( final Leg leg : t.getLegsOnly() ) { if ( !vehicularModes.contains( leg.getMode() ) ) continue; if ( allowNullRoutes && leg.getRoute() == null ) { // this is not so nice... leg.setRoute( new VehicleOnlyNetworkRoute() ); } if ( !( leg.getRoute() instanceof NetworkRoute ) ) { throw new RuntimeException( "route for mode "+leg.getMode()+" has non-network route "+leg.getRoute() ); } ((NetworkRoute) leg.getRoute()).setVehicleId( r.allocatedVehicle ); } } } }
@Override public Route getRoute() { // route should be unmodifiable. kai return this.delegate.getRoute() ; }
public Leg getLeg() { Leg leg = PopulationUtils.createLeg(mode); leg.setDepartureTime(departureTime); leg.setTravelTime(travelTime); leg.setRoute(route == null ? null : route.getRoute(mode)); return leg; } }
private boolean isVehicular(final Trip t) { // note: checking that getVehicle returns null doen't work // when allowing for null routes. Hence the duplication of the logic... final List<Leg> legs = t.getLegsOnly(); if ( legs.isEmpty() ) return false; // XXX what to do if several legs??? final Leg l = legs.get( 0 ); if ( !vehicularModes.contains( l.getMode() ) ) return false; if ( !allowNullRoutes && l.getRoute() == null ) return false; if ( l.getRoute() != null && !(l.getRoute() instanceof NetworkRoute) ) return false; return true; }
private void startLeg(final Attributes atts) { String mode = atts.getValue("mode").toLowerCase(Locale.ROOT); if (mode.equals("undef")) { mode = "undefined"; } this.currleg = PopulationUtils.createAndAddLeg( this.currplan, mode.intern() ); this.currleg.setDepartureTime(Time.parseTime(atts.getValue("dep_time"))); this.currleg.setTravelTime(Time.parseTime(atts.getValue("trav_time"))); // LegImpl r = this.currleg; // r.setTravelTime( Time.parseTime(atts.getValue("arr_time")) - r.getDepartureTime() ); // arrival time is in dtd, but no longer evaluated in code (according to not being in API). kai, jun'16 }
public void secondaryActivityFound(Activity act, Leg leg) { /* * No plan starts with secondary activity! */ this.subChains.get(subChainIndex).defineMode(leg.getMode()); this.subChains.get(subChainIndex).addAct(act); this.secondaryActFound = true; this.ttBudget += leg.getTravelTime(); this.totalTravelDistance += leg.getRoute().getDistance(); }
@Override public String identifyMainMode(final List<? extends PlanElement> tripElements) { if ( tripElements.size() == 1 && ((Leg) tripElements.get( 0 )).getMode().equals( TransportMode.transit_walk ) ) { return TransportMode.walk; } return delegate.identifyMainMode( tripElements ); } };
private static void unregisterPassengerFromDriverRoutes( final JointTrip toRemove) { for (Leg driverLeg : toRemove.getDriverLegs()) { final DriverRoute route = (DriverRoute) driverLeg.getRoute(); route.removePassenger( toRemove.getPassengerId() ); if ( route.getPassengersIds().isEmpty() ) { driverLeg.setMode( TransportMode.car ); driverLeg.setRoute( null ); } } } }
@Test public void testCreatesLeg() { Scenario scenario = createTriangularNetwork(); EventsToLegs eventsToLegs = new EventsToLegs(scenario); RememberingLegHandler lh = new RememberingLegHandler(); eventsToLegs.addLegHandler(lh); eventsToLegs.handleEvent(new PersonDepartureEvent(10.0, Id.create("1", Person.class), Id.create("l1", Link.class), "walk")); eventsToLegs.handleEvent(new TeleportationArrivalEvent(30.0, Id.create("1", Person.class), 50.0)); eventsToLegs.handleEvent(new PersonArrivalEvent(30.0, Id.create("1", Person.class), Id.create("l2", Link.class), "walk")); Assert.assertNotNull(lh.handledLeg); Assert.assertEquals(10.0, lh.handledLeg.getLeg().getDepartureTime(), 1e-9); Assert.assertEquals(20.0, lh.handledLeg.getLeg().getTravelTime(), 1e-9); Assert.assertEquals(50.0, lh.handledLeg.getLeg().getRoute().getDistance(), 1e-9); }
public AbstractFeatureType createLegFeature(Leg leg, StyleType style) { FolderType folder = this.kmlObjectFactory.createFolderType(); folder.setName(leg.getMode() + "_" + Time.writeTime(leg.getDepartureTime())); for (Id<Link> linkId : ((NetworkRoute) leg.getRoute()).getLinkIds()) { Link l = this.network.getLinks().get(linkId); AbstractFeatureType abstractFeature = this.createLinkFeature(l, style); if (abstractFeature.getClass().equals(FolderType.class)) { folder.getAbstractFeatureGroup().add(this.kmlObjectFactory.createFolder((FolderType) abstractFeature)); } else { log.warn("Not yet implemented: Adding link KML features of type" + abstractFeature.getClass()); } } for (Node n : RouteUtils.getNodes((NetworkRoute) leg.getRoute(), this.network)) { AbstractFeatureType abstractFeature = this.createNodeFeature(n, style); if (abstractFeature.getClass().equals(PlacemarkType.class)) { folder.getAbstractFeatureGroup().add(this.kmlObjectFactory.createPlacemark((PlacemarkType) abstractFeature)); } else { log.warn("Not yet implemented: Adding node KML features of type" + abstractFeature.getClass()); } } return folder; }
public void run(final Plan plan, boolean treatAccessEgressAsTransit) { List<String> accessModes = new ArrayList<>(); accessModes.add(TransportMode.transit_walk); if (treatAccessEgressAsTransit){ accessModes.add(TransportMode.access_walk); accessModes.add(TransportMode.egress_walk); } List<PlanElement> planElements = plan.getPlanElements(); for (int i = 0, n = planElements.size(); i < n; i++) { PlanElement pe = planElements.get(i); if (pe instanceof Activity) { Activity act = (Activity) pe; if (PtConstants.TRANSIT_ACTIVITY_TYPE.equals(act.getType())) { final int index = i; PopulationUtils.removeActivity(((Plan) plan), index); n -= 2; i--; // i will be incremented again in next loop-iteration, so we'll check the next act } } else if (pe instanceof Leg) { Leg leg = (Leg) pe; if (accessModes.contains(leg.getMode())) { leg.setMode(TransportMode.pt); leg.setRoute(null); } } } }
protected final List<Leg> createDirectWalkLegList(Person person, Coord fromCoord, Coord toCoord) { List<Leg> legs = new ArrayList<>(); Leg leg = PopulationUtils.createLeg(TransportMode.transit_walk); double walkTime = getWalkTime(person, fromCoord, toCoord); leg.setTravelTime(walkTime); Route walkRoute = RouteUtils.createGenericRouteImpl(null, null); walkRoute.setTravelTime(walkTime); leg.setRoute(walkRoute); legs.add(leg); return legs; }