/** * Helper method to complete a plan with *wh in a consistent way. Assuming that the first activity * is the home activity. * * @param plan * @param workCoord * @param jobLocation * @author nagel */ public static void completePlanToHwh( PlanImpl plan, Coord workCoord, ActivityFacility jobLocation) { // complete the first activity (home) by setting end time. ActivityImpl act = (ActivityImpl) plan.getFirstActivity(); act.setEndTime(7. * 3600.); // tnicolai: make configurable: see actType1.setOpeningTime(7*3600) // gather coordinate and facility id needed for last activity Coord homeCoord = act.getCoord(); Id homeId = act.getFacilityId(); // set Leg plan.createAndAddLeg(TransportMode.car); // set second activity (work) act = plan.createAndAddActivity(Constants.ACT_WORK, workCoord); act.setFacilityId(jobLocation.getId()); act.setMaximumDuration( 8. * 3600.); // tnicolai: make configurable: actType1.setTypicalDuration(8*60*60); // set Leg plan.createAndAddLeg(TransportMode.car); // set last activity (=first activity) and complete home-work-home plan. plan.createAndAddActivity(Constants.ACT_HOME, homeCoord); act = (ActivityImpl) plan.getLastActivity(); act.setFacilityId(homeId); }
/** * get parking related walking distance of whole day - average per leg * * @param plan * @param facilities * @return */ public static double getParkingRelatedWalkingDistanceOfWholeDayAveragePerLeg( Plan plan, ActivityFacilities facilities) { double travelDistance = 0; int numberOfLegs = 0; List<PlanElement> pe = plan.getPlanElements(); for (int i = 0; i < pe.size(); i++) { if (pe.get(i) instanceof ActivityImpl) { ActivityImpl parkingActivity = (ActivityImpl) pe.get(i); if (parkingActivity.getType().equalsIgnoreCase("parking")) { Coord coordParking = facilities.getFacilities().get(parkingActivity.getFacilityId()).getCoord(); Leg nextLeg = (Leg) pe.get(i + 1); Leg prevLeg = (Leg) pe.get(i - 1); if (nextLeg.getMode().equalsIgnoreCase("walk")) { ActivityImpl nextAct = (ActivityImpl) pe.get(i + 2); if (nextAct.getFacilityId() != null) { Coord nextActFacilityCoord = facilities.getFacilities().get(nextAct.getFacilityId()).getCoord(); travelDistance += GeneralLib.getDistance(coordParking, nextActFacilityCoord); } else { Coord nextActLinkCoord = nextAct.getCoord(); travelDistance += GeneralLib.getDistance(coordParking, nextActLinkCoord); } numberOfLegs++; } if (prevLeg.getMode().equalsIgnoreCase("walk")) { ActivityImpl prevAct = (ActivityImpl) pe.get(i - 2); if (prevAct.getFacilityId() != null) { Coord prevActFacilityCoord = facilities.getFacilities().get(prevAct.getFacilityId()).getCoord(); travelDistance += GeneralLib.getDistance(coordParking, prevActFacilityCoord); } else { Coord prevActLinkCoord = prevAct.getCoord(); travelDistance += GeneralLib.getDistance(coordParking, prevActLinkCoord); } numberOfLegs++; } } } } return travelDistance / numberOfLegs; }
/** * Get the ParkingTimeInfo of the parking related to the given activity * * @param activity * @return */ public static ParkingTimeInfo getParkingTimeInfo( Plan plan, ActivityImpl activity, ParkingArrivalDepartureLog parkingArrivalDepartureLog) { ActivityImpl arrivalParkingAct = getArrivalParkingAct(plan, activity); ActivityImpl departureParkingAct = getDepartureParkingAct(plan, activity); int parkingArrivalIndex = getParkingArrivalIndex(plan, arrivalParkingAct); ParkingTimeInfo parkingTimeInfo = parkingArrivalDepartureLog.getParkingArrivalDepartureList().get(parkingArrivalIndex); if (arrivalParkingAct.getFacilityId() != parkingTimeInfo.getParkingFacilityId()) { throw new Error( "facility Ids inconsistent:" + arrivalParkingAct.getFacilityId() + "!=" + parkingTimeInfo.getParkingFacilityId()); } return parkingTimeInfo; }
public ActivityFacilities filterFacilitiesWithPopulation( final ActivityFacilities origFacilities) { ActivityFacilities filteredFacilities = FacilitiesUtils.createActivityFacilities(); for (Person person : filteredAgents.values()) { if (person.getSelectedPlan() != null) { for (PlanElement pe : person.getSelectedPlan().getPlanElements()) { if (pe instanceof ActivityImpl) { ActivityImpl act = (ActivityImpl) pe; if (act.getFacilityId() != null && !filteredFacilities.getFacilities().containsKey(act.getFacilityId())) { filteredFacilities.addActivityFacility( origFacilities.getFacilities().get(act.getFacilityId())); } } } } } return filteredFacilities; }
/** * reurns null, if no parking activity found else id of first parking facility * * @param plan * @return */ public static Id<ActivityFacility> getFirstParkingFacilityId(Plan plan) { for (int i = 0; i < plan.getPlanElements().size(); i++) { if (plan.getPlanElements().get(i) instanceof ActivityImpl) { ActivityImpl activity = (ActivityImpl) plan.getPlanElements().get(i); if (activity.getType().equalsIgnoreCase("parking")) { return activity.getFacilityId(); } } } return null; }
/** * The home/first parking comes last (because it is the last parking arrival of the day). * * @param plan * @return */ public static LinkedList<Id<ActivityFacility>> getAllParkingFacilityIds(Plan plan) { LinkedList<Id<ActivityFacility>> parkingFacilityIds = new LinkedList<>(); // recognize parking arrival patterns (this means, there is car leg // after which there is // a parking activity). for (int i = 0; i < plan.getPlanElements().size(); i++) { if (plan.getPlanElements().get(i) instanceof ActivityImpl) { ActivityImpl activity = (ActivityImpl) plan.getPlanElements().get(i); if (activity.getType().equalsIgnoreCase("parking")) { Leg leg = (Leg) plan.getPlanElements().get(i - 1); if (leg.getMode().equalsIgnoreCase("car")) { parkingFacilityIds.add(activity.getFacilityId()); } } } } return parkingFacilityIds; }