@Override public List<? extends PlanElement> calcRoute(Facility fromFacility, Facility toFacility, double departureTime, Person person) { Leg newLeg = scenario.getPopulation().getFactory().createLeg( TransportMode.pt ); Id<Link> startLinkId = fromFacility.getLinkId(); Id<Link> endLinkId = toFacility.getLinkId(); newLeg.setDepartureTime( departureTime ); double travelTime = this.ptMatrix.getTotalTravelTime_seconds(fromFacility.getCoord(), toFacility.getCoord()); newLeg.setTravelTime( travelTime ); final Route route = genericRouteFactory.createRoute(startLinkId, endLinkId); double distance = this.ptMatrix.getTotalTravelDistance_meter(fromFacility.getCoord(), toFacility.getCoord()) ; route.setDistance(distance) ; newLeg.setRoute(route); return Arrays.asList( newLeg ); }
@Override public Coord getCoord() { return wrapped.getCoord(); }
@Override public Id<Link> getLinkId() { return wrapped.getLinkId(); }
@Override public List<? extends PlanElement> calcRoute( final Facility fromFacility, final Facility toFacility, final double departureTime, final Person person) { Leg l = popFactory.createLeg( modeName ); l.setDepartureTime( departureTime ); Route r = new PassengerRoute( fromFacility.getLinkId() , toFacility.getLinkId() ); l.setRoute( r ); return Collections.singletonList( l ); }
accessActLinkId = fromFacility.getLinkId() ; } catch ( Exception ee ) { accessActLink = network.getLinks().get( fromFacility.getLinkId() ); if( fromFacility.getCoord()==null ) { throw new RuntimeException("link for facility cannot be determined when neither facility link id nor facility coordinate given") ; accessActLink = NetworkUtils.getNearestLink(network, fromFacility.getCoord()) ; if ( accessActLink == null ) { int ii = 0 ;
@Override public List<Leg> calcRoute(final Facility fromFacility, final Facility toFacility, final double departureTime, final Person person) { // find possible start stops Map<TransitStopFacility, InitialNode> fromStops = this.locateWrappedNearestTransitStops(person, fromFacility.getCoord(), departureTime); // find possible end stops Map<TransitStopFacility, InitialNode> toStops = this.locateWrappedNearestTransitStops(person, toFacility.getCoord(), departureTime); // find routes between start and end stops TransitPassengerRoute p = this.raptorWalker.calcLeastCostPath(fromStops, toStops); if (p == null) { // return null; // returning at least walk legs if no PT route is found. Amit Aug'17 return this.createDirectWalkLegList(null, fromFacility.getCoord(), toFacility.getCoord()); } double directWalkCost = getWalkDisutility(fromFacility.getCoord(), toFacility.getCoord()); double pathCost = p.getTravelCost(); if (directWalkCost * getConfig().getDirectWalkFactor() < pathCost) { return this.createDirectWalkLegList(null, fromFacility.getCoord(), toFacility.getCoord()); } return convertPassengerRouteToLegList(departureTime, p, fromFacility.getCoord(), toFacility.getCoord(), person); }
private Route createWalkRoute(final Facility fromFacility, double departureTime, Person person, double travelTime, Facility firstToFacility) { // yyyy I extracted this method to make a bit more transparent that it is used twice. But I don't know why it is done in this way // (take distance from newly computed walk leg, but take travelTime from elsewhere). Possibly, the problem is that the TransitRouter // historically just does not compute the distances. kai, may'17 Route route = RouteUtils.createGenericRouteImpl(fromFacility.getLinkId(), firstToFacility.getLinkId()); final List<? extends PlanElement> walkRoute = walkRouter.calcRoute(fromFacility, firstToFacility, departureTime, person); route.setDistance(((Leg) walkRoute.get(0)).getRoute().getDistance()); route.setTravelTime(travelTime); return route; }
@Override public void run(final GroupPlans plans) { final List<Facility> groupChoiceSet = choiceSet.getGroupChoiceSet( plans ); for ( Plan plan : plans.getAllIndividualPlans() ) { for ( Activity act : TripStructureUtils.getActivities( plan , choiceSet.filter ) ) { assert act.getType().equals( choiceSet.type ); final Facility choice = groupChoiceSet.get( random.nextInt( groupChoiceSet.size() ) ); ((Activity) act).setCoord( choice.getCoord() ); ((Activity) act).setLinkId( choice.getLinkId() ); if ( choice instanceof Identifiable ) { ( (Activity) act ).setFacilityId( ((Identifiable)choice).getId() ); } else { throw new RuntimeException( Facility.FACILITY_NO_LONGER_IDENTIFIABLE ) ; } } } }
@Override public List<Leg> calcRoute(final Facility fromFacility, final Facility toFacility, final double departureTime, final Person person) { // find possible start stops Map<Node, InitialNode> wrappedFromNodes = this.locateWrappedNearestTransitNodes(person, fromFacility.getCoord(), departureTime); // find possible end stops Map<Node, InitialNode> wrappedToNodes = this.locateWrappedNearestTransitNodes(person, toFacility.getCoord(), departureTime); // find routes between start and end stops Path p = this.dijkstra.calcLeastCostPath(wrappedFromNodes, wrappedToNodes, person); if (p == null) { return null; } double directWalkCost = CoordUtils.calcEuclideanDistance(fromFacility.getCoord(), toFacility.getCoord()) / this.config.getBeelineWalkSpeed() * ( 0 - this.config.getMarginalUtilityOfTravelTimeWalk_utl_s()); double pathCost = p.travelCost + wrappedFromNodes.get(p.nodes.get(0)).initialCost + wrappedToNodes.get(p.nodes.get(p.nodes.size() - 1)).initialCost; if (directWalkCost < pathCost) { List<Leg> legs = new ArrayList<Leg>(); Leg leg = PopulationUtils.createLeg(TransportMode.transit_walk); double walkDistance = CoordUtils.calcEuclideanDistance(fromFacility.getCoord(), toFacility.getCoord()); Route walkRoute = RouteUtils.createGenericRouteImpl(null, null); walkRoute.setDistance(walkDistance); leg.setRoute(walkRoute); leg.setTravelTime(walkDistance/this.config.getBeelineWalkSpeed()); legs.add(leg); return legs; } return convertPathToLegList( departureTime, p, fromFacility.getCoord(), toFacility.getCoord(), person ) ; }
Gbl.assertNotNull(toFacility); if (!toFacility.getLinkId().equals(fromFacility.getLinkId())) { .get(Id.create(fromFacility.getLinkId(), Node.class)); Node toInvNode = this.invertedNetwork.getNodes().get(Id.create(toFacility.getLinkId(), Node.class)); + fromFacility.getLinkId() + " to link " + toFacility.getLinkId() + "."); NetworkRoute route = this.populationFactory.getRouteFactories().createRoute(NetworkRoute.class, fromFacility.getLinkId(), toFacility.getLinkId()); route.setLinkIds(fromFacility.getLinkId(), NetworkUtils.getLinkIds(path.links), toFacility.getLinkId()); route.setTravelTime(path.travelTime); route.setTravelCost(path.travelCost); NetworkRoute route = this.populationFactory.getRouteFactories().createRoute(NetworkRoute.class, fromFacility.getLinkId(), toFacility.getLinkId()); route.setTravelTime(0); route.setDistance(0.0);
@Test public void testWrapper() { for (Activity activity : activities) { Facility wrapper = new ActivityWrapperFacility( activity ); Assert.assertEquals( "wrapped activity returns incorrect coordinate!", activity.getCoord(), wrapper.getCoord()); Assert.assertEquals( "wrapped activity returns incorrect link id!", activity.getLinkId(), wrapper.getLinkId()); } } }
fromFacility.getCoord(), departureTime); toFacility.getCoord(), departureTime); return this.createDirectWalkLegList(null, fromFacility.getCoord(), toFacility.getCoord()); double directWalkCost = getWalkDisutility(person, fromFacility.getCoord(), toFacility.getCoord()); return this.createDirectWalkLegList(null, fromFacility.getCoord(), toFacility.getCoord()); fromFacility.getCoord(), toFacility.getCoord(), person);
Route route = RouteUtils.createGenericRouteImpl(fromFacility.getLinkId(), toFacility.getLinkId()); route.setDistance(Double.NaN); route.setTravelTime(Double.NaN); leg.setTravelTime(Double.NaN); leg.setRoute(route); if (fromFacility.getLinkId().equals(toFacility.getLinkId())) { leg.setMode(TransportMode.walk);
Gbl.assertNotNull(toFacility); Link fromLink = this.network.getLinks().get(fromFacility.getLinkId()); if ( fromLink==null ) { Gbl.assertNotNull( fromFacility.getCoord() ) ; fromLink = NetworkUtils.getNearestLink( network, fromFacility.getCoord()) ; Link toLink = this.network.getLinks().get(toFacility.getLinkId()); if ( toLink==null ) { Gbl.assertNotNull( toFacility.getCoord() ) ; toLink = NetworkUtils.getNearestLink(network, toFacility.getCoord());
if (facility.getCoord().getX() < minx) { minx = facility.getCoord().getX(); } if (facility.getCoord().getY() < miny) { miny = facility.getCoord().getY(); } if (facility.getCoord().getX() > maxx) { maxx = facility.getCoord().getX(); } if (facility.getCoord().getY() > maxy) { maxy = facility.getCoord().getY(); }
public static void addBushwhackingLegFromLinkToFacilityIfNecessary( final Facility toFacility, final Person person, final Link egressActLink, double now, final List<PlanElement> result, final PopulationFactory populationFactory, final String stageActivityType ) { if ( toFacility.getCoord() != null ) { // otherwise the trip ends directly on the link; no need to bushwhack Coord egressActCoord = egressActLink.getToNode().getCoord() ; Gbl.assertNotNull( egressActCoord ); final Activity interactionActivity = createInteractionActivity( egressActCoord, egressActLink.getId(), stageActivityType ); result.add( interactionActivity ) ; // log.warn( interactionActivity ); Leg egressLeg = populationFactory.createLeg( TransportMode.egress_walk ) ; egressLeg.setDepartureTime( now ); routeBushwhackingLeg(person, egressLeg, egressActCoord, toFacility.getCoord(), now, egressActLink.getId(), egressActLink.getId(), populationFactory ) ; result.add( egressLeg ) ; // log.warn( egressLeg ); } // log.warn( "===" ); }
public static double addBushwhackingLegFromFacilityToLinkIfNecessary( final Facility fromFacility, final Person person, final Link accessActLink, double now, final List<PlanElement> result, final PopulationFactory populationFactory, final String stageActivityType ) { if ( fromFacility.getCoord() != null ) { // otherwise the trip starts directly on the link; no need to bushwhack Coord accessActCoord = accessActLink.getToNode().getCoord() ; // yyyy think about better solution: this may generate long walks along the link. // (e.g. orthogonal projection) Gbl.assertNotNull(accessActCoord); Leg accessLeg = populationFactory.createLeg( TransportMode.access_walk ) ; accessLeg.setDepartureTime( now ); now += routeBushwhackingLeg(person, accessLeg, fromFacility.getCoord(), accessActCoord, now, accessActLink.getId(), accessActLink.getId(), populationFactory ) ; // yyyy might be possible to set the link ids to null. kai & dominik, may'16 result.add( accessLeg ) ; // log.warn( accessLeg ); final Activity interactionActivity = createInteractionActivity(accessActCoord, accessActLink.getId(), stageActivityType ); result.add( interactionActivity ) ; // log.warn( interactionActivity ); } return now; }