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