MATSIM
RunCreateFacilities.java
Go to the documentation of this file.
1 package tutorial.programming.demandGenerationWithFacilities;
2 
3 import org.apache.log4j.Logger;
4 import org.matsim.api.core.v01.Coord;
5 import org.matsim.api.core.v01.Id;
10 import org.matsim.facilities.*;
11 
12 import java.io.BufferedReader;
13 import java.io.FileReader;
14 import java.io.IOException;
15 
16 public class RunCreateFacilities {
17 
18  private final static Logger log = Logger.getLogger(RunCreateFacilities.class);
19  private Scenario scenario;
20  private static final String censusFile = "examples/tutorial/programming/demandGenerationWithFacilities/census.txt";
21  private static final String businessCensusFile = "examples/tutorial/programming/demandGenerationWithFacilities/business_census.txt";
22 
23  public static void main(String[] args) {
24  RunCreateFacilities facilitiesCreator = new RunCreateFacilities();
25  facilitiesCreator.init();
26  facilitiesCreator.run();
27  facilitiesCreator.write();
28  log.info("Creation finished #################################");
29  }
30 
31  private void init() {
32  /*
33  * Create the scenario
34  */
35  Config config = ConfigUtils.createConfig();
36  this.scenario = ScenarioUtils.createScenario(config);
37  }
38 
39  private void run() {
40  /*
41  * Read the business census for work, shop, leisure and education facilities
42  */
43  int startIndex = this.readBusinessCensus();
44 
45  /*
46  * Read the census for home facilities. Other sources such as official dwelling directories could be used as well.
47  * Usually some aggregation should be done. In this example we simply add every home location as a facility.
48  */
49  this.readCensus(startIndex);
50 
51  }
52 
53  private int readBusinessCensus() {
54  int cnt = 0;
55  try {
56  BufferedReader bufferedReader = new BufferedReader(new FileReader(businessCensusFile));
57  bufferedReader.readLine(); //skip header
58 
59  // id = 0
60  int index_xCoord = 1;
61  int index_yCoord = 2;
62  int index_types = 3;
63 
64  String line;
65  while ((line = bufferedReader.readLine()) != null) {
66  String parts[] = line.split("\t");
67 
68  Coord coord = new Coord(Double.parseDouble(parts[index_xCoord]), Double.parseDouble(parts[index_yCoord]));
69 
71  this.scenario.getActivityFacilities().addActivityFacility(facility);
72 
73  String types [] = parts[index_types].split(",");
74  for (String type : types) {
75  this.addActivityOption(facility, type);
76  }
77  cnt++;
78  }
79  bufferedReader.close();
80  } // end try
81  catch (IOException e) {
82  e.printStackTrace();
83  }
84  return cnt;
85  }
86 
87  private void readCensus(int startIndex) {
88  try {
89  BufferedReader bufferedReader = new BufferedReader(new FileReader(censusFile));
90  bufferedReader.readLine(); //skip header
91 
92  int index_xHomeCoord = 10;
93  int index_yHomeCoord = 11;
94 
95  int cnt = 0;
96  String line;
97  while ((line = bufferedReader.readLine()) != null) {
98  String parts[] = line.split("\t");
99 
100  Coord homeCoord = new Coord(Double.parseDouble(parts[index_xHomeCoord]), Double.parseDouble(parts[index_yHomeCoord]));
101 
102  ActivityFacility facility = this.scenario.getActivityFacilities().getFactory().createActivityFacility(Id.create(startIndex + cnt, ActivityFacility.class), homeCoord);
103  addActivityOption(facility, "home");
104  scenario.getActivityFacilities().addActivityFacility(facility);
105  cnt++;
106  }
107  bufferedReader.close();
108  } catch (IOException e) {
109  throw new RuntimeException(e);
110  }
111  }
112 
113  private void addActivityOption(ActivityFacility facility, String type) {
114  ((ActivityFacilityImpl) facility).createAndAddActivityOption(type);
115 
116  /*
117  * [[ 1 ]] Specify the opening hours here for shopping and leisure. An example is given for the activities work and home.
118  */
119  ActivityOptionImpl actOption = (ActivityOptionImpl)facility.getActivityOptions().get(type);
120  if (type.equals("work")) {
121  actOption.addOpeningTime(new OpeningTimeImpl(8.0 * 3600.0, 19.0 * 3600)); //[[ 1 ]] opentime = null;
122  }
123 
124  }
125 
126  public void write() {
127  new FacilitiesWriter(this.scenario.getActivityFacilities()).write("./output/facilities.xml");
128  }
129 }
void addActivityFacility(ActivityFacility facility)
ActivityFacilitiesFactory getFactory()
ActivityFacility createActivityFacility(Id< ActivityFacility > id, Coord coord)
static Config createConfig(final String filename)
ActivityFacilities getActivityFacilities()
Map< String, ActivityOption > getActivityOptions()
static Scenario createScenario(final Config config)