MATSIM
WorldConnectLocations.java
Go to the documentation of this file.
1 /* *********************************************************************** *
2  * project: org.matsim.*
3  * WorldBottom2TopCompletion.java
4  * *
5  * *********************************************************************** *
6  * *
7  * copyright : (C) 2007 by the members listed in the COPYING, *
8  * LICENSE and WARRANTY file. *
9  * email : info at matsim dot org *
10  * *
11  * *********************************************************************** *
12  * *
13  * This program is free software; you can redistribute it and/or modify *
14  * it under the terms of the GNU General Public License as published by *
15  * the Free Software Foundation; either version 2 of the License, or *
16  * (at your option) any later version. *
17  * See also COPYING, LICENSE and WARRANTY file *
18  * *
19  * *********************************************************************** */
20 
21 package org.matsim.facilities.algorithms;
22 
23 import org.apache.logging.log4j.LogManager;
24 import org.apache.logging.log4j.Logger;
25 import org.matsim.api.core.v01.Id;
28 import org.matsim.core.config.Config;
30 import org.matsim.core.utils.io.IOUtils;
34 
35 import java.io.*;
36 import java.util.HashSet;
37 import java.util.Set;
38 
39 public class WorldConnectLocations {
40 
41  private final static Logger log = LogManager.getLogger(WorldConnectLocations.class);
42 
43  private final Config config;
44 
45  public final static String CONFIG_F2L = "f2l";
46 
47  public final static String CONFIG_F2L_INPUTF2LFile = "inputF2LFile";
48 
49  public final static String CONFIG_F2L_OUTPUTF2LFile = "outputF2LFile";
50 
51  public WorldConnectLocations(final Config config) {
52  this.config = config;
53  }
54 
55  private final void connectByFile(final ActivityFacilities facilities, final Network network, final String file, final Set<Id<ActivityFacility>> remainingFacilities) {
56  log.info(" connecting facilities with links via "+CONFIG_F2L_INPUTF2LFile+"="+file);
57  try (BufferedReader br = IOUtils.getBufferedReader(file)) {
58  int lineCnt = 0;
59  String currLine;
60  br.readLine(); lineCnt++; // Skip header
61  while ((currLine = br.readLine()) != null) {
62  String[] entries = currLine.split("\t", -1);
63  // fid lid
64  // 0 1
65  Id<ActivityFacility> fid = Id.create(entries[0].trim(), ActivityFacility.class);
66  Id<Link> lid = Id.create(entries[1].trim(), Link.class);
67  ActivityFacility f = facilities.getFacilities().get(fid);
68  Link l = network.getLinks().get(lid);
69  if ((f != null) && (l != null)) {
70  l = network.getLinks().get(l.getId());
71  mapFacilityToLink(f,l);
72  remainingFacilities.remove(f.getId());
73  }
74  else { log.warn(lineCnt+": at least one of the two locations not found."); }
75  lineCnt++;
76  }
77  } catch (IOException e) {
78  throw new RuntimeException("Error while reading given inputF2LFile='"+file+"'.", e);
79  }
80  log.info(" number of facilities that are still not connected to a link = "+remainingFacilities.size());
81  log.info(" done. (connecting facilities with links via "+CONFIG_F2L_INPUTF2LFile+"="+file+")");
82  }
83 
85  ((ActivityFacilityImpl) f).setLinkId(l.getId());
86  }
87 
88  private final void writeF2LFile(final ActivityFacilities facilities, final String file) {
89  log.info(" writing f<-->l connections to "+CONFIG_F2L_OUTPUTF2LFile+"="+file);
90  try (BufferedWriter bw = IOUtils.getBufferedWriter(file)) {
91  bw.write("fid\tlid\n");
92  for (ActivityFacility f : facilities.getFacilities().values()) {
93  bw.write(f.getId().toString()+"\t"+f.getLinkId().toString()+"\n");
94  }
95  } catch (IOException e) {
96  throw new RuntimeException("Error while writing given outputF2LFile='"+file+"'.", e);
97  }
98  log.info(" done. (writing f<-->l connections to "+CONFIG_F2L_OUTPUTF2LFile+"="+file+")");
99  }
100 
101  public final void connectFacilitiesWithLinks(final ActivityFacilities facilities, final Network network) {
102  log.info(" connecting facilities with links...");
103 
104  Set<Id<ActivityFacility>> remainingFacilities = new HashSet<>(facilities.getFacilities().keySet());
105  if (this.config != null) {
106  String inputF2LFile = this.config.findParam(CONFIG_F2L,CONFIG_F2L_INPUTF2LFile);
107  if (inputF2LFile != null) {
108  connectByFile(facilities,network,inputF2LFile,remainingFacilities);
109  }
110  }
111 
112  log.info(" connecting remaining facilities with links ("+remainingFacilities.size()+" remaining)...");
113  for (Id<ActivityFacility> fid : remainingFacilities) {
114  ActivityFacility f = facilities.getFacilities().get(fid);
116  l = network.getLinks().get(l.getId());
117  mapFacilityToLink(f,l);
118  }
119  log.info(" done.");
120 
121  if (this.config != null) {
122  String outputF2LFile = this.config.findParam(CONFIG_F2L,CONFIG_F2L_OUTPUTF2LFile);
123  if (outputF2LFile != null) {
124  writeF2LFile(facilities,outputF2LFile);
125  }
126  }
127  log.info(" done. (connecting facilities with links)");
128  }
129 
130 }
final void writeF2LFile(final ActivityFacilities facilities, final String file)
Map< Id< ActivityFacility >, ? extends ActivityFacility > getFacilities()
final void connectFacilitiesWithLinks(final ActivityFacilities facilities, final Network network)
static Link getNearestRightEntryLink(Network network, final Coord coord)
static BufferedReader getBufferedReader(URL url, Charset charset)
Definition: IOUtils.java:321
final String findParam(final String moduleName, final String paramName)
Definition: Config.java:346
static BufferedWriter getBufferedWriter(URL url, Charset charset, boolean append)
Definition: IOUtils.java:390
static< T > Id< T > create(final long key, final Class< T > type)
Definition: Id.java:68
Map< Id< Link >, ? extends Link > getLinks()
final void connectByFile(final ActivityFacilities facilities, final Network network, final String file, final Set< Id< ActivityFacility >> remainingFacilities)