MATSIM
CarTravelDistanceEvaluator.java
Go to the documentation of this file.
1 /* *********************************************************************** *
2  * project: org.matsim.* *
3  * *
4  * *********************************************************************** *
5  * *
6  * copyright : (C) 2008 by the members listed in the COPYING, *
7  * LICENSE and WARRANTY file. *
8  * email : info at matsim dot org *
9  * *
10  * *********************************************************************** *
11  * *
12  * This program is free software; you can redistribute it and/or modify *
13  * it under the terms of the GNU General Public License as published by *
14  * the Free Software Foundation; either version 2 of the License, or *
15  * (at your option) any later version. *
16  * See also COPYING, LICENSE and WARRANTY file *
17  * *
18  * *********************************************************************** */
19 package tutorial.programming.example21tutorialTUBclass.class2016.events;
20 
21 import java.util.HashMap;
22 import java.util.Map;
23 
24 import org.matsim.api.core.v01.Id;
37 import org.matsim.vehicles.Vehicle;
38 
41 
42  private Network network;
43  private Map<Id<Person>,Double> travelledDistance = new HashMap<>();
44  private Map<Id<Vehicle>,Id<Person>> vehicles2Persons = new HashMap<>();
45 
46  private int[] distanceDistribution = new int[30];
47 
49  this.network = network;
50  }
51 
52  @Override
53  public void reset(int iteration) {
54  distanceDistribution = new int[30];
55  }
56 
57  @Override
59  if (travelledDistance.containsKey(event.getPersonId())){
60  vehicles2Persons.put(event.getVehicleId(), event.getPersonId());
61  }
62  }
63 
64  @Override
65  public void handleEvent(PersonArrivalEvent event) {
66  if (this.travelledDistance.containsKey(event.getPersonId())){
67  double distance = this.travelledDistance.get(event.getPersonId());
68  this.travelledDistance.remove(event.getPersonId()); //could be one step instead
69  int distanceInKm = (int) (distance/1000);
70  if (distanceInKm>29) {
71  distanceInKm = 29;
72  //everything above 29km goes into the last bin
73  }
74  this.distanceDistribution[distanceInKm]++;
75 
76  }
77  }
78 
79  @Override
80  public void handleEvent(PersonDepartureEvent event) {
81  if (event.getLegMode().equals("car")){
82  if (!event.getPersonId().toString().startsWith("pt_")){
83  travelledDistance.put(event.getPersonId(), 0.0);
84  }
85  }
86  }
87 
88  @Override
89  public void handleEvent(LinkEnterEvent event) {
90  if (this.vehicles2Persons.containsKey(event.getVehicleId())){
91  Id<Person> personId = this.vehicles2Persons.get(event.getVehicleId());
92  double distanceSoFarTravelled = this.travelledDistance.get(personId);
93  double length = this.network.getLinks().get(event.getLinkId()).getLength();
94  double newDistanceTravelled = distanceSoFarTravelled+length;
95  this.travelledDistance.put(personId, newDistanceTravelled);
96  }
97  }
98 
99  @Override
101  if (this.vehicles2Persons.containsKey(event.getVehicleId())){
102  this.vehicles2Persons.remove(event.getVehicleId());
103  }
104  }
105 
106  public int[] getDistanceDistribution() {
107  return distanceDistribution;
108  }
109 
110 }
Map< Id< Link >,?extends Link > getLinks()