1 package tutorial.programming.example08DemandGeneration;
2
3 import java.util.ArrayList;
4 import java.util.List;
5 import java.util.Map;
6 import java.util.TreeMap;
7
8 import org.matsim.api.core.v01.Coord;
9 import org.matsim.api.core.v01.Scenario;
10 import org.matsim.api.core.v01.TransportMode;
11 import org.matsim.api.core.v01.population.Activity;
12 import org.matsim.api.core.v01.population.Leg;
13 import org.matsim.api.core.v01.population.Person;
14 import org.matsim.api.core.v01.population.Plan;
15 import org.matsim.api.core.v01.population.Population;
16 import org.matsim.api.core.v01.population.PopulationFactory;
17 import org.matsim.core.config.ConfigUtils;
18 import org.matsim.core.population.PopulationWriter;
19 import org.matsim.core.scenario.ScenarioUtils;
20
21 public class ZPopulationGenerator {
22
23 public static void main(String args[]) {
24
25
26
27
28 Scenario scenario = createPopulationFromCensusFile("./input/input_sample_zurich.txt");
29
30
31
32
33 PopulationWriter populationWriter = new PopulationWriter(scenario.getPopulation(), scenario.getNetwork());
34 populationWriter.write("./input/population.xml");
35
36 }
37
38 private static Scenario createPopulationFromCensusFile(String censusFile) {
39
40 Scenario scenario = ScenarioUtils.createScenario(ConfigUtils.createConfig());
41
42
43
44
45 List<ZCensusEntry> censusEntries = new ZCensusParser().readFile(censusFile);
46
47
48
49
50
51
52
53 Population population = scenario.getPopulation();
54 PopulationFactory populationFactory = population.getFactory();
55
56
57
58
59
60
61
62
63
64
65
66 Map<Integer, List<ZCensusEntry>> personEntryMapping = new TreeMap<Integer, List<ZCensusEntry>>();
67 for (ZCensusEntry censusEntry : censusEntries) {
68
69
70
71
72 List<ZCensusEntry> entries = personEntryMapping.get(censusEntry.id_person);
73
74
75
76
77 if (entries == null) {
78 entries = new ArrayList<ZCensusEntry>();
79 personEntryMapping.put(censusEntry.id_person, entries);
80 }
81
82
83
84
85 entries.add(censusEntry);
86 }
87
88
89
90
91 for (List<ZCensusEntry> personEntries : personEntryMapping.values()) {
92
93
94
95 ZCensusEntry entry = personEntries.get(0);
96
97
98
99
100 int id_person = entry.id_person;
101
102
103
104
105
106 Person person = populationFactory.createPerson(scenario.createId(String.valueOf(id_person)));
107 population.addPerson(person);
108
109
110
111
112
113 Plan plan = populationFactory.createPlan();
114 person.addPlan(plan);
115
116
117
118
119
120
121
122 Coord homeCoord = scenario.createCoord(entry.h_x, entry.h_y);
123 Activity homeActivity = populationFactory.createActivityFromCoord("home", homeCoord);
124 homeActivity.setStartTime(0.0);
125 plan.addActivity(homeActivity);
126
127
128
129
130
131
132
133
134
135
136
137
138
139 Coord endCoord = null;
140 String transportMode = null;
141 Leg leg = null;
142 Activity activity = null;
143 Activity previousActivity = homeActivity;
144
145
146
147
148 for (ZCensusEntry personEntry : personEntries) {
149 endCoord = scenario.createCoord(personEntry.d_x, personEntry.d_y);
150 transportMode = getTransportMode(personEntry.tripmode);
151 String activityType = getActivityType(personEntry.trippurpose);
152
153
154
155
156
157 leg = populationFactory.createLeg(transportMode);
158 leg.setDepartureTime(personEntry.starttime * 60);
159 leg.setTravelTime(personEntry.tripduration * 60);
160 previousActivity.setEndTime(personEntry.starttime * 60);
161
162
163
164
165 activity = populationFactory.createActivityFromCoord(activityType, endCoord);
166 activity.setStartTime(personEntry.starttime * 60 + personEntry.tripduration * 60);
167
168
169
170
171 plan.addLeg(leg);
172 plan.addActivity(activity);
173
174
175
176
177 previousActivity = activity;
178 }
179
180
181
182
183
184 if (activity.getCoord().equals(homeCoord)) {
185 activity.setType("home");
186 }
187 }
188 return scenario;
189
190 }
191
192
193
194
195
196 private static String getTransportMode(int mode) {
197 switch (mode) {
198 case 1: return TransportMode.walk;
199 case 2: return TransportMode.bike;
200 case 3: return TransportMode.car;
201 case 4: return TransportMode.pt;
202 case 5: return "undefined";
203
204 default: return "undefined";
205 }
206 }
207
208 private static String getActivityType(int activityType) {
209 switch (activityType) {
210 case 1: return "work";
211 case 2: return "education";
212 case 3: return "shop";
213 case 4: return "leisure";
214 case 5: return "other";
215
216 default: return "undefined";
217 }
218 }
219
220 }