SUMO - Simulation of Urban MObility
Main Page
Related Pages
Modules
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Groups
Pages
NBFrame.cpp
Go to the documentation of this file.
1
/****************************************************************************/
9
// Sets and checks options for netbuild
10
/****************************************************************************/
11
// SUMO, Simulation of Urban MObility; see http://sumo.sourceforge.net/
12
// Copyright (C) 2001-2013 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 <fstream>
35
#include "
NBFrame.h
"
36
#include "
NBNodeCont.h
"
37
#include "
NBEdgeCont.h
"
38
#include "
NBTrafficLightLogicCont.h
"
39
#include "
NBDistrictCont.h
"
40
#include "
NBDistribution.h
"
41
#include "
NBRequest.h
"
42
#include "
NBTypeCont.h
"
43
#include <
utils/options/OptionsCont.h
>
44
#include <
utils/common/MsgHandler.h
>
45
#include <
utils/common/UtilExceptions.h
>
46
#include <
utils/common/StringTokenizer.h
>
47
#include <
utils/common/ToString.h
>
48
#include <
utils/geom/GeoConvHelper.h
>
49
#include <
utils/iodevices/OutputDevice.h
>
50
#include <
utils/xml/SUMOXMLDefinitions.h
>
51
52
#ifdef CHECK_MEMORY_LEAKS
53
#include <
foreign/nvwa/debug_new.h
>
54
#endif // CHECK_MEMORY_LEAKS
55
56
57
// ===========================================================================
58
// method definitions
59
// ===========================================================================
60
void
61
NBFrame::fillOptions
(
bool
forNetgen) {
62
OptionsCont
& oc =
OptionsCont::getOptions
();
63
// register building defaults
64
oc.
doRegister
(
"default.lanenumber"
,
'L'
,
new
Option_Integer
(1));
65
oc.
addSynonyme
(
"default.lanenumber"
,
"lanenumber"
,
true
);
66
oc.
addDescription
(
"default.lanenumber"
,
"Building Defaults"
,
"The default number of lanes in an edge"
);
67
68
oc.
doRegister
(
"default.speed"
,
'S'
,
new
Option_Float
((
SUMOReal
) 13.9));
69
oc.
addSynonyme
(
"default.speed"
,
"speed"
,
true
);
70
oc.
addDescription
(
"default.speed"
,
"Building Defaults"
,
"The default speed on an edge (in m/s)"
);
71
72
oc.
doRegister
(
"default.priority"
,
'P'
,
new
Option_Integer
(-1));
73
oc.
addSynonyme
(
"default.priority"
,
"priority"
,
true
);
74
oc.
addDescription
(
"default.priority"
,
"Building Defaults"
,
"The default priority of an edge"
);
75
76
77
// register the data processing options
78
oc.
doRegister
(
"no-internal-links"
,
new
Option_Bool
(
false
));
// !!! not described
79
oc.
addDescription
(
"no-internal-links"
,
"Processing"
,
"Omits internal links"
);
80
81
if
(!forNetgen) {
82
oc.
doRegister
(
"dismiss-vclasses"
,
new
Option_Bool
(
false
));
83
oc.
addDescription
(
"dismiss-vclasses"
,
"Processing"
,
"Removes vehicle class restrictions from imported edges."
);
84
}
85
86
oc.
doRegister
(
"no-turnarounds"
,
new
Option_Bool
(
false
));
87
oc.
addDescription
(
"no-turnarounds"
,
"Processing"
,
"Disables building turnarounds"
);
88
89
oc.
doRegister
(
"no-turnarounds.tls"
,
new
Option_Bool
(
false
));
90
oc.
addSynonyme
(
"no-turnarounds.tls"
,
"no-tls-turnarounds"
,
true
);
91
oc.
addDescription
(
"no-turnarounds.tls"
,
"Processing"
,
"Disables building turnarounds at tls-controlled junctions"
);
92
93
oc.
doRegister
(
"no-left-connections"
,
new
Option_Bool
(
false
));
94
oc.
addDescription
(
"no-left-connections"
,
"Processing"
,
"Disables building connections to left"
);
95
96
if
(!forNetgen) {
97
oc.
doRegister
(
"geometry.split"
,
new
Option_Bool
(
false
));
// !!!not described
98
oc.
addSynonyme
(
"geometry.split"
,
"split-geometry"
,
true
);
99
oc.
addDescription
(
"geometry.split"
,
"Processing"
,
"Splits edges across geometry nodes"
);
100
101
oc.
doRegister
(
"geometry.remove"
,
'R'
,
new
Option_Bool
(
false
));
102
oc.
addSynonyme
(
"geometry.remove"
,
"remove-geometry"
,
true
);
103
oc.
addDescription
(
"geometry.remove"
,
"Processing"
,
"Replace nodes which only define edge geometry by geometry points (joins edges)"
);
104
105
oc.
doRegister
(
"geometry.max-segment-length"
,
new
Option_Float
(0));
106
oc.
addDescription
(
"geometry.max-segment-length"
,
"Processing"
,
"splits geometry to restrict segment length"
);
107
108
oc.
doRegister
(
"geometry.min-dist"
,
new
Option_Float
());
109
oc.
addDescription
(
"geometry.min-dist"
,
"Processing"
,
"reduces too similar geometry points"
);
110
}
111
112
oc.
doRegister
(
"offset.disable-normalization"
,
new
Option_Bool
(
false
));
113
oc.
addSynonyme
(
"offset.disable-normalization"
,
"disable-normalize-node-positions"
,
true
);
114
oc.
addDescription
(
"offset.disable-normalization"
,
"Processing"
,
"Turn off normalizing node positions"
);
115
116
oc.
doRegister
(
"offset.x"
,
new
Option_Float
(0));
117
oc.
addSynonyme
(
"offset.x"
,
"x-offset-to-apply"
,
true
);
118
oc.
addDescription
(
"offset.x"
,
"Processing"
,
"Adds FLOAT to net x-positions"
);
119
120
oc.
doRegister
(
"offset.y"
,
new
Option_Float
(0));
121
oc.
addSynonyme
(
"offset.y"
,
"y-offset-to-apply"
,
true
);
122
oc.
addDescription
(
"offset.y"
,
"Processing"
,
"Adds FLOAT to net y-positions"
);
123
124
oc.
doRegister
(
"flip-y-axis"
,
new
Option_Bool
(
false
));
125
oc.
addSynonyme
(
"flip-y-axis"
,
"flip-y"
);
126
oc.
addDescription
(
"flip-y-axis"
,
"Processing"
,
"Flips the y-coordinate along zero"
);
127
128
oc.
doRegister
(
"roundabouts.guess"
,
new
Option_Bool
(
false
));
129
oc.
addSynonyme
(
"roundabouts.guess"
,
"guess-roundabouts"
,
true
);
130
oc.
addDescription
(
"roundabouts.guess"
,
"Processing"
,
"Enable roundabout-guessing"
);
131
132
oc.
doRegister
(
"lefthand"
,
new
Option_Bool
(
false
));
133
oc.
addDescription
(
"lefthand"
,
"Processing"
,
"Assumes left-hand traffic on the network"
);
134
135
oc.
doRegister
(
"junctions.join"
,
new
Option_Bool
(
false
));
136
oc.
addDescription
(
"junctions.join"
,
"Processing"
,
137
"Joins junctions that are close to each other (recommended for OSM import)"
);
138
139
oc.
doRegister
(
"junctions.join-dist"
,
new
Option_Float
(10));
140
oc.
addDescription
(
"junctions.join-dist"
,
"Processing"
,
141
"Determines the maximal distance for joining junctions (defaults to 10)"
);
142
143
if
(!forNetgen) {
144
oc.
doRegister
(
"junctions.join-exclude"
,
new
Option_String
());
145
oc.
addDescription
(
"junctions.join-exclude"
,
"Processing"
,
"Interprets STR as list of junctions to exclude from joining"
);
146
147
oc.
doRegister
(
"speed.offset"
,
new
Option_Float
(0));
148
oc.
addDescription
(
"speed.offset"
,
"Processing"
,
"Modifies all edge speeds by adding FLOAT"
);
149
150
oc.
doRegister
(
"speed.factor"
,
new
Option_Float
(1));
151
oc.
addDescription
(
"speed.factor"
,
"Processing"
,
"Modifies all edge speeds by multiplying FLOAT"
);
152
}
153
154
// tls setting options
155
// explicit tls
156
oc.
doRegister
(
"tls.set"
,
new
Option_String
());
157
oc.
addSynonyme
(
"tls.set"
,
"explicite-tls"
,
true
);
158
oc.
addDescription
(
"tls.set"
,
"TLS Building"
,
"Interprets STR as list of junctions to be controlled by TLS"
);
159
160
oc.
doRegister
(
"tls.unset"
,
new
Option_String
());
161
oc.
addSynonyme
(
"tls.unset"
,
"explicite-no-tls"
,
true
);
162
oc.
addDescription
(
"tls.unset"
,
"TLS Building"
,
"Interprets STR as list of junctions to be not controlled by TLS"
);
163
164
// tls-guessing
165
oc.
doRegister
(
"tls.guess"
,
new
Option_Bool
(
false
));
166
oc.
addSynonyme
(
"tls.guess"
,
"guess-tls"
,
true
);
167
oc.
addDescription
(
"tls.guess"
,
"TLS Building"
,
"Turns on TLS guessing"
);
168
169
if
(!forNetgen) {
170
oc.
doRegister
(
"tls.taz-nodes"
,
new
Option_Bool
(
false
));
171
oc.
addSynonyme
(
"tls.taz-nodes"
,
"tls-guess.district-nodes"
,
true
);
172
oc.
addDescription
(
"tls.taz-nodes"
,
"TLS Building"
,
"Sets district nodes as tls-controlled"
);
// !!! describe
173
}
174
175
oc.
doRegister
(
"tls-guess.joining"
,
new
Option_Bool
(
false
));
176
oc.
addDescription
(
"tls-guess.joining"
,
"TLS Building"
,
"Includes node clusters into guess"
);
// !!! describe
177
178
oc.
doRegister
(
"tls.join"
,
new
Option_Bool
(
false
));
179
oc.
addSynonyme
(
"tls.join"
,
"try-join-tls"
,
true
);
180
oc.
addDescription
(
"tls.join"
,
"TLS Building"
,
"Tries to cluster tls-controlled nodes"
);
// !!! describe
181
182
oc.
doRegister
(
"tls.join-dist"
,
new
Option_Float
(20));
183
oc.
addDescription
(
"tls.join-dist"
,
"Processing"
,
184
"Determines the maximal distance for joining traffic lights (defaults to 20)"
);
185
186
// computational
187
oc.
doRegister
(
"tls.green.time"
,
new
Option_Integer
(31));
188
oc.
addSynonyme
(
"tls.green.time"
,
"traffic-light-green"
,
true
);
189
oc.
addDescription
(
"tls.green.time"
,
"TLS Building"
,
"Use INT as green phase duration"
);
190
191
oc.
doRegister
(
"tls.yellow.min-decel"
,
'D'
,
new
Option_Float
(3.0));
192
oc.
addSynonyme
(
"tls.yellow.min-decel"
,
"min-decel"
,
true
);
193
oc.
addDescription
(
"tls.yellow.min-decel"
,
"TLS Building"
,
"Defines smallest vehicle deceleration"
);
194
195
oc.
doRegister
(
"tls.yellow.patch-small"
,
new
Option_Bool
(
false
));
196
oc.
addSynonyme
(
"tls.yellow.patch-small"
,
"patch-small-tyellow"
,
true
);
197
oc.
addDescription
(
"tls.yellow.patch-small"
,
"TLS Building"
,
"Given yellow times are patched even if being too short"
);
198
199
oc.
doRegister
(
"tls.yellow.time"
,
new
Option_Integer
());
200
oc.
addSynonyme
(
"tls.yellow.time"
,
"traffic-light-yellow"
,
true
);
201
oc.
addDescription
(
"tls.yellow.time"
,
"TLS Building"
,
"Set INT as fixed time for yellow phase durations"
);
202
203
// tls-shifts
204
oc.
doRegister
(
"tls.half-offset"
,
new
Option_String
());
205
oc.
addSynonyme
(
"tls.half-offset"
,
"tl-logics.half-offset"
,
true
);
206
oc.
addDescription
(
"tls.half-offset"
,
"TLS Building"
,
"TLSs in STR will be shifted by half-phase"
);
207
208
oc.
doRegister
(
"tls.quarter-offset"
,
new
Option_String
());
209
oc.
addSynonyme
(
"tls.quarter-offset"
,
"tl-logics.quarter-offset"
,
true
);
210
oc.
addDescription
(
"tls.quarter-offset"
,
"TLS Building"
,
"TLSs in STR will be shifted by quarter-phase"
);
211
212
// tls type
213
oc.
doRegister
(
"tls.default-type"
,
new
Option_String
(
"static"
));
214
oc.
addDescription
(
"tls.default-type"
,
"TLS Building"
,
"TLSs with unspecified type will use STR as their algorithm."
);
215
216
217
// edge pruning
218
oc.
doRegister
(
"keep-edges.min-speed"
,
new
Option_Float
());
219
oc.
addSynonyme
(
"keep-edges.min-speed"
,
"edges-min-speed"
,
true
);
220
oc.
addDescription
(
"keep-edges.min-speed"
,
"Edge Removal"
,
"Only keep edges with speed in meters/second > FLOAT"
);
221
222
oc.
doRegister
(
"remove-edges.explicit"
,
new
Option_String
());
223
oc.
addSynonyme
(
"remove-edges.explicit"
,
"remove-edges"
);
224
oc.
addDescription
(
"remove-edges.explicit"
,
"Edge Removal"
,
"Remove edges in STR"
);
225
226
oc.
doRegister
(
"keep-edges.explicit"
,
new
Option_String
());
227
oc.
addSynonyme
(
"keep-edges.explicit"
,
"keep-edges"
);
228
oc.
addDescription
(
"keep-edges.explicit"
,
"Edge Removal"
,
"Only keep edges in STR"
);
229
230
oc.
doRegister
(
"keep-edges.input-file"
,
new
Option_FileName
());
231
oc.
addDescription
(
"keep-edges.input-file"
,
"Edge Removal"
,
"Only keep edges in FILE"
);
232
233
if
(!forNetgen) {
234
oc.
doRegister
(
"keep-edges.postload"
,
new
Option_Bool
(
false
));
235
oc.
addDescription
(
"keep-edges.postload"
,
"Edge Removal"
,
"Remove edges after joining"
);
236
}
237
238
oc.
doRegister
(
"keep-edges.in-boundary"
,
new
Option_String
());
239
oc.
addDescription
(
"keep-edges.in-boundary"
,
"Edge Removal"
,
"Only keep edges which are located within the given boundary (given either as CARTESIAN corner coordinates <xmin,ymin,xmax,ymax> or as polygon <x0,y0,x1,y1,...>)"
);
240
241
if
(!forNetgen) {
242
oc.
doRegister
(
"keep-edges.by-vclass"
,
new
Option_String
());
243
oc.
addDescription
(
"keep-edges.by-vclass"
,
"Edge Removal"
,
"Only keep edges which allow one of the vclasss in STR"
);
244
245
oc.
doRegister
(
"remove-edges.by-vclass"
,
new
Option_String
());
246
oc.
addDescription
(
"remove-edges.by-vclass"
,
"Edge Removal"
,
"Remove edges which allow only vclasses from STR"
);
247
248
oc.
doRegister
(
"keep-edges.by-type"
,
new
Option_String
());
249
oc.
addDescription
(
"keep-edges.by-type"
,
"Edge Removal"
,
"Only keep edges where type is in STR"
);
250
251
oc.
doRegister
(
"remove-edges.by-type"
,
new
Option_String
());
252
oc.
addDescription
(
"remove-edges.by-type"
,
"Edge Removal"
,
"Remove edges where type is in STR"
);
253
254
oc.
doRegister
(
"remove-edges.isolated"
,
new
Option_Bool
(
false
));
255
oc.
addSynonyme
(
"remove-edges.isolated"
,
"remove-isolated"
,
true
);
256
oc.
addDescription
(
"remove-edges.isolated"
,
"Edge Removal"
,
"Removes isolated edges"
);
257
}
258
259
260
// unregulated nodes options
261
oc.
doRegister
(
"keep-nodes-unregulated"
,
new
Option_Bool
(
false
));
262
oc.
addSynonyme
(
"keep-nodes-unregulated"
,
"keep-unregulated"
);
263
oc.
addDescription
(
"keep-nodes-unregulated"
,
"Unregulated Nodes"
,
"All nodes will be unregulated"
);
264
265
oc.
doRegister
(
"keep-nodes-unregulated.explicit"
,
new
Option_String
());
266
oc.
addSynonyme
(
"keep-nodes-unregulated.explicit"
,
"keep-unregulated.explicit"
);
267
oc.
addSynonyme
(
"keep-nodes-unregulated.explicit"
,
"keep-unregulated.nodes"
,
true
);
268
oc.
addDescription
(
"keep-nodes-unregulated.explicit"
,
"Unregulated Nodes"
,
"Do not regulate nodes in STR"
);
269
270
oc.
doRegister
(
"keep-nodes-unregulated.district-nodes"
,
new
Option_Bool
(
false
));
271
oc.
addSynonyme
(
"keep-nodes-unregulated.district-nodes"
,
"keep-unregulated.district-nodes"
);
272
oc.
addDescription
(
"keep-nodes-unregulated.district-nodes"
,
"Unregulated Nodes"
,
"Do not regulate district nodes"
);
273
274
275
// ramp guessing options
276
if
(!forNetgen) {
277
oc.
doRegister
(
"ramps.guess"
,
new
Option_Bool
(
false
));
278
oc.
addSynonyme
(
"ramps.guess"
,
"guess-ramps"
,
true
);
279
oc.
addDescription
(
"ramps.guess"
,
"Ramp Guessing"
,
"Enable ramp-guessing"
);
280
281
oc.
doRegister
(
"ramps.max-ramp-speed"
,
new
Option_Float
(-1));
282
oc.
addSynonyme
(
"ramps.max-ramp-speed"
,
"ramp-guess.max-ramp-speed"
,
true
);
283
oc.
addDescription
(
"ramps.max-ramp-speed"
,
"Ramp Guessing"
,
"Treat edges with speed > FLOAT as no ramps"
);
284
285
oc.
doRegister
(
"ramps.min-highway-speed"
,
new
Option_Float
((
SUMOReal
)(79 / 3.6)));
286
oc.
addSynonyme
(
"ramps.min-highway-speed"
,
"ramp-guess.min-highway-speed"
,
true
);
287
oc.
addDescription
(
"ramps.min-highway-speed"
,
"Ramp Guessing"
,
"Treat edges with speed < FLOAT as no highways"
);
288
289
oc.
doRegister
(
"ramps.ramp-length"
,
new
Option_Float
(100));
290
oc.
addSynonyme
(
"ramps.ramp-length"
,
"ramp-guess.ramp-length"
,
true
);
291
oc.
addDescription
(
"ramps.ramp-length"
,
"Ramp Guessing"
,
"Use FLOAT as ramp-length"
);
292
293
oc.
doRegister
(
"ramps.set"
,
new
Option_String
());
294
oc.
addSynonyme
(
"ramps.set"
,
"ramp-guess.explicite"
,
true
);
295
oc.
addDescription
(
"ramps.set"
,
"Ramp Guessing"
,
"Tries to handle the given edges as ramps"
);
296
297
oc.
doRegister
(
"ramps.no-split"
,
new
Option_Bool
(
false
));
298
oc.
addSynonyme
(
"ramps.no-split"
,
"ramp-guess.no-split"
,
true
);
299
oc.
addDescription
(
"ramps.no-split"
,
"Ramp Guessing"
,
"Avoids edge splitting"
);
300
}
301
}
302
303
304
bool
305
NBFrame::checkOptions
() {
306
OptionsCont
& oc =
OptionsCont::getOptions
();
307
bool
ok =
true
;
308
//
309
if
(!oc.
isDefault
(
"tls-guess.joining"
)) {
310
WRITE_WARNING
(
"'--tls-guess.joining' was joined with '--tls.join'.\n Please use '--tls.join' in future only."
);
311
if
(!oc.
isSet
(
"tls.join"
)) {
312
oc.
set
(
"tls.join"
,
"true"
);
313
}
314
}
315
if
(!
SUMOXMLDefinitions::TrafficLightTypes
.hasString(oc.
getString
(
"tls.default-type"
))) {
316
WRITE_ERROR
(
"unsupported value '"
+ oc.
getString
(
"tls.default-type"
) +
"' for option '--tls.default-type'"
);
317
ok =
false
;
318
}
319
return
ok;
320
}
321
322
323
/****************************************************************************/
build
buildd
sumo-0.17.1~dfsg
src
netbuild
NBFrame.cpp
Generated on Sun Jun 16 2013 17:30:17 for SUMO - Simulation of Urban MObility by
1.8.3.1