SUMO - Simulation of Urban MObility
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
NIFrame.cpp
Go to the documentation of this file.
1 /****************************************************************************/
9 // Sets and checks options for netimport
10 /****************************************************************************/
11 // SUMO, Simulation of Urban MObility; see http://sumo.sourceforge.net/
12 // Copyright (C) 2001-2012 DLR (http://www.dlr.de/) and contributors
13 /****************************************************************************/
14 //
15 // This file is part of SUMO.
16 // SUMO is free software: you can redistribute it and/or modify
17 // it under the terms of the GNU General Public License as published by
18 // the Free Software Foundation, either version 3 of the License, or
19 // (at your option) any later version.
20 //
21 /****************************************************************************/
22 
23 
24 // ===========================================================================
25 // included modules
26 // ===========================================================================
27 #ifdef _MSC_VER
28 #include <windows_config.h>
29 #else
30 #include <config.h>
31 #endif
32 
33 #include <string>
34 #include <iostream>
35 #include <fstream>
36 #include <utils/options/Option.h>
40 #include <utils/common/ToString.h>
41 #include "NIFrame.h"
45 #include <netbuild/NBNetBuilder.h>
46 #include <netwrite/NWFrame.h>
48 
49 #ifdef CHECK_MEMORY_LEAKS
50 #include <foreign/nvwa/debug_new.h>
51 #endif // CHECK_MEMORY_LEAKS
52 
53 
54 // ===========================================================================
55 // method definitions
56 // ===========================================================================
57 void
60  // register input formats
61  oc.doRegister("sumo-net-file", 's', new Option_FileName());
62  oc.addSynonyme("sumo-net-file", "sumo-net", true);
63  oc.addDescription("sumo-net-file", "Input", "Read SUMO-net from FILE");
64 
65  oc.doRegister("node-files", 'n', new Option_FileName());
66  oc.addSynonyme("node-files", "xml-node-files", true);
67  oc.addSynonyme("node-files", "xml-nodes", true);
68  oc.addSynonyme("node-files", "nodes");
69  oc.addDescription("node-files", "Input", "Read XML-node defs from FILE");
70 
71  oc.doRegister("edge-files", 'e', new Option_FileName());
72  oc.addSynonyme("edge-files", "xml-edge-files", true);
73  oc.addSynonyme("edge-files", "xml-edges", true);
74  oc.addSynonyme("edge-files", "edges");
75  oc.addDescription("edge-files", "Input", "Read XML-edge defs from FILE");
76 
77  oc.doRegister("connection-files", 'x', new Option_FileName());
78  oc.addSynonyme("connection-files", "xml-connection-files", true);
79  oc.addSynonyme("connection-files", "xml-connections", true);
80  oc.addSynonyme("connection-files", "connections");
81  oc.addDescription("connection-files", "Input", "Read XML-connection defs from FILE");
82 
83  oc.doRegister("tllogic-files", 'i', new Option_FileName());
84  oc.addDescription("tllogic-files", "Input", "Read XML-traffic light defs from FILE");
85 
86  oc.doRegister("type-files", 't', new Option_FileName());
87  oc.addSynonyme("type-files", "xml-type-files", true);
88  oc.addSynonyme("type-files", "xml-types", true);
89  oc.addSynonyme("type-files", "types");
90  oc.addDescription("type-files", "Input", "Read XML-type defs from FILE");
91 
92  oc.doRegister("shapefile-prefix", new Option_FileName());
93  oc.addSynonyme("shapefile-prefix", "shapefile");
94  oc.addSynonyme("shapefile-prefix", "arcview", true);
95  oc.addSynonyme("shapefile-prefix", "tiger", true);
96  oc.addDescription("shapefile-prefix", "Input", "Read shapefiles (ArcView, Tiger, ...) from files starting with 'FILE'");
97 
98  oc.doRegister("dlr-navteq-prefix", new Option_FileName());
99  oc.addSynonyme("dlr-navteq-prefix", "dlr-navteq");
100  oc.addSynonyme("dlr-navteq-prefix", "elmar2", true);
101  oc.addDescription("dlr-navteq-prefix", "Input", "Read converted Navteq GDF data (unsplitted Elmar-network) from path 'FILE'");
102 
103  oc.doRegister("osm-files", new Option_FileName());
104  oc.addSynonyme("osm-files", "osm");
105  oc.addDescription("osm-files", "Input", "Read OSM-network from path 'FILE(s)'");
106 
107  oc.doRegister("opendrive-files", new Option_FileName());
108  oc.addSynonyme("opendrive-files", "opendrive");
109  oc.addDescription("opendrive-files", "Input", "Read openDrive-network from FILE");
110 
111  oc.doRegister("visum-file", new Option_FileName());
112  oc.addSynonyme("visum-file", "visum");
113  oc.addDescription("visum-file", "Input", "Read VISUM-net from FILE");
114 
115  oc.doRegister("vissim-file", new Option_FileName());
116  oc.addSynonyme("vissim-file", "vissim");
117  oc.addDescription("vissim-file", "Input", "Read VISSIM-net from FILE");
118 
119  oc.doRegister("robocup-dir", new Option_FileName());
120  oc.addSynonyme("robocup-dir", "robocup-net", true);
121  oc.addSynonyme("robocup-dir", "robocup");
122  oc.addDescription("robocup-dir", "Input", "Read RoboCup-net from DIR");
123 
124  oc.doRegister("matsim-files", new Option_FileName());
125  oc.addSynonyme("matsim-files", "matsim");
126  oc.addDescription("matsim-files", "Input", "Read MATsim-net from FILE");
127 
128  oc.doRegister("itsumo-files", new Option_FileName());
129  oc.addSynonyme("itsumo-files", "itsumo");
130  oc.addDescription("itsumo-files", "Input", "Read ITSUMO-net from FILE");
131 
132 #ifdef HAVE_MESOSIM // catchall for internal stuff
133  oc.doRegister("heightmap.shapefiles", new Option_FileName());
134  oc.addDescription("heightmap.shapefiles", "Input", "Read heightmap from ArcGIS shapefile");
135 #endif // have HAVE_MESOSIM
136 
137  // register basic processing options
138  oc.doRegister("ignore-errors", new Option_Bool(false));
139  oc.addSynonyme("ignore-errors", "dismiss-loading-errors", true);
140  oc.addDescription("ignore-errors", "Processing", "Continue on broken input");
141 
142  oc.doRegister("ignore-errors.connections", new Option_Bool(false));
143  oc.addDescription("ignore-errors.connections", "Processing", "Continue on invalid connections");
144 
145  oc.doRegister("lanes-from-capacity.norm", new Option_Float((SUMOReal) 1800));
146  oc.addSynonyme("lanes-from-capacity.norm", "capacity-norm");
147  oc.addDescription("lanes-from-capacity.norm", "Processing", "The factor for flow to no. lanes conversion.");
148 
149  oc.doRegister("speed-in-kmh", new Option_Bool(false));
150  oc.addDescription("speed-in-kmh", "Processing", "vmax is parsed as given in km/h (some)");
151 
152 
153  // register xml options
154  oc.doRegister("plain.keep-edge-shape", new Option_Bool(false));
155  oc.addSynonyme("plain.keep-edge-shape", "xml.keep-shape", true);
156  oc.addDescription("plain.keep-edge-shape", "Processing", "No node positions are added to the edge shape");
157 
158 
159  // register matsim options
160  oc.doRegister("matsim.keep-length", new Option_Bool(false));
161  oc.addDescription("matsim.keep-length", "Processing", "The edge lengths given in the MATSIM-file will be kept.");
162 
163  oc.doRegister("matsim.lanes-from-capacity", new Option_Bool(false));
164  oc.addDescription("matsim.lanes-from-capacity", "Processing", "The lane number will be computed from the capacity.");
165 
166 
167  // register shapefile options
168  oc.doRegister("shapefile.street-id", new Option_String());
169  oc.addSynonyme("shapefile.street-id", "arcview.street-id", true);
170  oc.addDescription("shapefile.street-id", "Processing", "Read edge ids from column STR");
171 
172  oc.doRegister("shapefile.from-id", new Option_String());
173  oc.addSynonyme("shapefile.from-id", "arcview.from-id", true);
174  oc.addDescription("shapefile.from-id", "Processing", "Read from-node ids from column STR");
175 
176  oc.doRegister("shapefile.to-id", new Option_String());
177  oc.addSynonyme("shapefile.to-id", "arcview.to-id", true);
178  oc.addDescription("shapefile.to-id", "Processing", "Read to-node ids from column STR");
179 
180  oc.doRegister("shapefile.type-id", new Option_String());
181  oc.addSynonyme("shapefile.type-id", "arcview.type-id", true);
182  oc.addDescription("shapefile.type-id", "Processing", "Read type ids from column STR");
183 
184  oc.doRegister("shapefile.use-defaults-on-failure", new Option_Bool(false));
185  oc.addSynonyme("shapefile.use-defaults-on-failure", "arcview.use-defaults-on-failure", true);
186  oc.addDescription("shapefile.use-defaults-on-failure", "Processing", "Uses edge type defaults on problems");
187 
188  oc.doRegister("shapefile.all-bidirectional", new Option_Bool(false));
189  oc.addSynonyme("shapefile.all-bidirectional", "shapefile.all-bidi");
190  oc.addSynonyme("shapefile.all-bidirectional", "arcview.all-bidi", true);
191  oc.addDescription("shapefile.all-bidirectional", "Processing", "Insert edges in both directions");
192 
193  oc.doRegister("shapefile.guess-projection", new Option_Bool(false));
194  oc.addSynonyme("shapefile.guess-projection", "arcview.guess-projection", true);
195  oc.addDescription("shapefile.guess-projection", "Processing", "Guess the proper projection");
196 
197 
198  // register vissim options
199  oc.doRegister("vissim.join-distance", new Option_Float(5.0f));
200  oc.addSynonyme("vissim.join-distance", "vissim.offset", true);
201  oc.addDescription("vissim.join-distance", "Processing", "Structure join offset");
202 
203  oc.doRegister("vissim.default-speed", new Option_Float(50.0f));
204  oc.addDescription("vissim.default-speed", "Processing", "Use FLOAT as default speed");
205 
206  oc.doRegister("vissim.speed-norm", new Option_Float(1.0f));
207  oc.addDescription("vissim.speed-norm", "Processing", "Factor for edge velocity");
208 
209  oc.doRegister("vissim.report-unset-speeds", new Option_Bool(false));
210  oc.addDescription("vissim.report-unset-speeds", "Processing", "Writes lanes without an explicit speed set.");
211 
212 
213  // register visum options
214  oc.doRegister("visum.use-type-priority", new Option_Bool(false));
215  oc.addDescription("visum.use-type-priority", "Processing", "Uses priorities from types");
216 
217  oc.doRegister("visum.use-type-laneno", new Option_Bool(false));
218  oc.addDescription("visum.use-type-laneno", "Processing", "Uses lane numbers from types");
219 
220  oc.doRegister("visum.use-type-speed", new Option_Bool(false));
221  oc.addDescription("visum.use-type-speed", "Processing", "Uses speeds from types");
222 
223  oc.doRegister("visum.connector-speeds", new Option_Float(100.));
224  oc.addDescription("visum.connector-speeds", "Processing", "Sets connector speed");
225 
226  oc.doRegister("visum.connectors-lane-number", new Option_Integer(3));
227  oc.addSynonyme("visum.connectors-lane-number", "visum.connector-laneno", true);
228  oc.addDescription("visum.connectors-lane-number", "Processing", "Sets connector lane number");
229 
230  oc.doRegister("visum.no-connectors", new Option_Bool(false));
231  oc.addDescription("visum.no-connectors", "Processing", "Excludes connectors");
232 
233  oc.doRegister("visum.recompute-lane-number", new Option_Bool(false));
234  oc.addSynonyme("visum.recompute-lane-number", "visum.recompute-laneno", true);
235  oc.addDescription("visum.recompute-lane-number", "Processing", "Computes the number of lanes from the edges' capacities");
236 
237  oc.doRegister("visum.verbose-warnings", new Option_Bool(false));
238  oc.addDescription("visum.verbose-warnings", "Processing", "Prints all warnings, some of which are due to VISUM misbehaviour");
239 
240 
241  // register osm options
242  oc.doRegister("osm.skip-duplicates-check", new Option_Bool(false));
243  oc.addDescription("osm.skip-duplicates-check", "Processing", "Skips the check for duplicate nodes and edges.");
244 
245  oc.doRegister("osm.discard-tls", new Option_Bool(false));
246  oc.addDescription("osm.discard-tls", "Processing", "Discards all traffic lights.");
247 }
248 
249 
250 bool
253  bool ok = oc.checkDependingSuboptions("shapefile", "shapefile.");
254  ok &= oc.checkDependingSuboptions("visum-file", "visum.");
255  ok &= oc.checkDependingSuboptions("vissim-file", "vissim.");
256 #ifdef HAVE_PROJ
257  unsigned numProjections = oc.getBool("simple-projection") + oc.getBool("proj.utm") + oc.getBool("proj.dhdn") + (oc.getString("proj").length() > 1);
258  if ((oc.isSet("osm-files") || oc.isSet("dlr-navteq-prefix") || oc.isSet("shapefile-prefix")) && numProjections == 0) {
259  if(oc.isDefault("proj")) {
260  oc.set("proj.utm", "true");
261  }
262  }
263  if (oc.isSet("dlr-navteq-prefix") && oc.isDefault("proj.scale")) {
264  oc.set("proj.scale", std::string("5"));
265  }
266 #endif
267  if (oc.isSet("sumo-net-file")) {
268  if (oc.isWriteable("no-turnarounds")) {
269  // changed default since turnarounds are loaded from the net file.
270  oc.set("no-turnarounds", "true");
271  }
272  if (oc.isWriteable("offset.disable-normalization")) {
273  // changed default since we wish to preserve the network as far as possible
274  oc.set("offset.disable-normalization", "true");
275  }
276  }
277  return ok;
278 }
279 
280 
281 
282 /****************************************************************************/
283