|
SUMO - Simulation of Urban MObility
|
00001 /****************************************************************************/ 00007 // Sets and checks options for netbuild 00008 /****************************************************************************/ 00009 // SUMO, Simulation of Urban MObility; see http://sumo.sourceforge.net/ 00010 // Copyright (C) 2001-2011 DLR (http://www.dlr.de/) and contributors 00011 /****************************************************************************/ 00012 // 00013 // This program is free software; you can redistribute it and/or modify 00014 // it under the terms of the GNU General Public License as published by 00015 // the Free Software Foundation; either version 2 of the License, or 00016 // (at your option) any later version. 00017 // 00018 /****************************************************************************/ 00019 00020 00021 // =========================================================================== 00022 // included modules 00023 // =========================================================================== 00024 #ifdef _MSC_VER 00025 #include <windows_config.h> 00026 #else 00027 #include <config.h> 00028 #endif 00029 00030 #include <string> 00031 #include <fstream> 00032 #include "NBFrame.h" 00033 #include "NBNodeCont.h" 00034 #include "NBEdgeCont.h" 00035 #include "NBTrafficLightLogicCont.h" 00036 #include "NBDistrictCont.h" 00037 #include "NBDistribution.h" 00038 #include "NBRequest.h" 00039 #include "NBTypeCont.h" 00040 #include <utils/options/OptionsCont.h> 00041 #include <utils/common/MsgHandler.h> 00042 #include <utils/common/UtilExceptions.h> 00043 #include <utils/common/StringTokenizer.h> 00044 #include <utils/common/ToString.h> 00045 #include <utils/geom/GeoConvHelper.h> 00046 #include <utils/iodevices/OutputDevice.h> 00047 00048 #ifdef CHECK_MEMORY_LEAKS 00049 #include <foreign/nvwa/debug_new.h> 00050 #endif // CHECK_MEMORY_LEAKS 00051 00052 00053 // =========================================================================== 00054 // method definitions 00055 // =========================================================================== 00056 void 00057 NBFrame::fillOptions(bool forNetgen) { 00058 OptionsCont& oc = OptionsCont::getOptions(); 00059 // register building defaults 00060 oc.doRegister("default.lanenumber", 'L', new Option_Integer(1)); 00061 oc.addSynonyme("default.lanenumber", "lanenumber", true); 00062 oc.addDescription("default.lanenumber", "Building Defaults", "The default number of lanes in an edge"); 00063 00064 oc.doRegister("default.speed", 'S', new Option_Float((SUMOReal) 13.9)); 00065 oc.addSynonyme("default.speed", "speed", true); 00066 oc.addDescription("default.speed", "Building Defaults", "The default speed on an edge (in m/s)"); 00067 00068 oc.doRegister("default.priority", 'P', new Option_Integer(-1)); 00069 oc.addSynonyme("default.priority", "priority", true); 00070 oc.addDescription("default.priority", "Building Defaults", "The default priority of an edge"); 00071 00072 00073 // register the data processing options 00074 oc.doRegister("no-internal-links", new Option_Bool(false)); // !!! not described 00075 oc.addDescription("no-internal-links", "Processing", "Omits internal links"); 00076 00077 if (!forNetgen) { 00078 oc.doRegister("dismiss-vclasses", new Option_Bool(false)); 00079 oc.addDescription("dismiss-vclasses", "Processing", "Removes vehicle class restrictions from imported edges."); 00080 } 00081 00082 oc.doRegister("no-turnarounds", new Option_Bool(false)); 00083 oc.addDescription("no-turnarounds", "Processing", "Disables building turnarounds"); 00084 00085 oc.doRegister("no-turnarounds.tls", new Option_Bool(false)); 00086 oc.addSynonyme("no-turnarounds.tls", "no-tls-turnarounds", true); 00087 oc.addDescription("no-turnarounds.tls", "Processing", "Disables building turnarounds at tls-controlled junctions"); 00088 00089 oc.doRegister("no-left-connections", new Option_Bool(false)); 00090 oc.addDescription("no-left-connections", "Processing", "Disables building connections to left"); 00091 00092 if (!forNetgen) { 00093 oc.doRegister("geometry.split", new Option_Bool(false)); // !!!not described 00094 oc.addSynonyme("geometry.split", "split-geometry", true); 00095 oc.addDescription("geometry.split", "Processing", "Splits edges across geometry nodes"); 00096 00097 oc.doRegister("geometry.remove", 'R', new Option_Bool(false)); 00098 oc.addSynonyme("geometry.remove", "remove-geometry", true); 00099 oc.addDescription("geometry.remove", "Processing", "Removes geometry information from edges"); 00100 00101 oc.doRegister("geometry.max-segment-length", new Option_Float(0)); 00102 oc.addDescription("geometry.max-segment-length", "Processing", "splits geometry to restrict segment length"); 00103 } 00104 00105 oc.doRegister("offset.disable-normalization", new Option_Bool(false)); 00106 oc.addSynonyme("offset.disable-normalization", "disable-normalize-node-positions", true); 00107 oc.addDescription("offset.disable-normalization", "Processing", "Turn off normalizing node positions"); 00108 00109 oc.doRegister("offset.x", new Option_Float(0)); 00110 oc.addSynonyme("offset.x", "x-offset-to-apply", true); 00111 oc.addDescription("offset.x", "Processing", "Adds FLOAT to net x-positions"); 00112 00113 oc.doRegister("offset.y", new Option_Float(0)); 00114 oc.addSynonyme("offset.y", "y-offset-to-apply", true); 00115 oc.addDescription("offset.y", "Processing", "Adds FLOAT to net y-positions"); 00116 00117 oc.doRegister("flip-y-axis", new Option_Bool(false)); 00118 oc.addSynonyme("flip-y-axis", "flip-y"); 00119 oc.addDescription("flip-y-axis", "Processing", "Flips the y-coordinate along zero"); 00120 00121 oc.doRegister("roundabouts.guess", new Option_Bool(false)); 00122 oc.addSynonyme("roundabouts.guess", "guess-roundabouts", true); 00123 oc.addDescription("roundabouts.guess", "Processing", "Enable roundabout-guessing"); 00124 00125 oc.doRegister("lefthand", new Option_Bool(false)); 00126 oc.addDescription("lefthand", "Processing", "Assumes left-hand traffic on the network"); 00127 00128 oc.doRegister("junctions.join", new Option_Bool(false)); 00129 oc.addDescription("junctions.join", "Processing", 00130 "Joins junctions that are close to each other (recommended for OSM import)"); 00131 00132 oc.doRegister("junctions.join-dist", new Option_Float(15)); 00133 oc.addDescription("junctions.join-dist", "Processing", 00134 "Determines the maximal distance for joining junctions (defaults to 15)"); 00135 00136 if (!forNetgen) { 00137 oc.doRegister("junctions.join-exclude", new Option_String()); 00138 oc.addDescription("junctions.join-exclude", "Processing", "Interprets STR as list of junctions to exclude from joining"); 00139 } 00140 00141 // tls setting options 00142 // explicit tls 00143 oc.doRegister("tls.set", new Option_String()); 00144 oc.addSynonyme("tls.set", "explicite-tls", true); 00145 oc.addDescription("tls.set", "TLS Building", "Interprets STR as list of junctions to be controlled by TLS"); 00146 00147 oc.doRegister("tls.unset", new Option_String()); 00148 oc.addSynonyme("tls.unset", "explicite-no-tls", true); 00149 oc.addDescription("tls.unset", "TLS Building", "Interprets STR as list of junctions to be not controlled by TLS"); 00150 00151 // tls-guessing 00152 oc.doRegister("tls.guess", new Option_Bool(false)); 00153 oc.addSynonyme("tls.guess", "guess-tls", true); 00154 oc.addDescription("tls.guess", "TLS Building", "Turns on TLS guessing"); 00155 00156 if (!forNetgen) { 00157 oc.doRegister("tls.taz-nodes", new Option_Bool(false)); 00158 oc.addSynonyme("tls.taz-nodes", "tls-guess.district-nodes", true); 00159 oc.addDescription("tls.taz-nodes", "TLS Building", "Sets district nodes as tls-controlled"); // !!! describe 00160 } 00161 00162 oc.doRegister("tls-guess.joining", new Option_Bool(false)); 00163 oc.addDescription("tls-guess.joining", "TLS Building", "Includes node clusters into guess"); // !!! describe 00164 00165 oc.doRegister("tls.join", new Option_Bool(false)); 00166 oc.addSynonyme("tls.join", "try-join-tls", true); 00167 oc.addDescription("tls.join", "TLS Building", "Tries to cluster tls-controlled nodes"); // !!! describe 00168 00169 // computational 00170 oc.doRegister("tls.green.time", new Option_Integer(31)); 00171 oc.addSynonyme("tls.green.time", "traffic-light-green", true); 00172 oc.addDescription("tls.green.time", "TLS Building", "Use INT as green phase duration"); 00173 00174 oc.doRegister("tls.yellow.min-decel", 'D', new Option_Float(3.0)); 00175 oc.addSynonyme("tls.yellow.min-decel", "min-decel", true); 00176 oc.addDescription("tls.yellow.min-decel", "TLS Building", "Defines smallest vehicle deceleration"); 00177 00178 oc.doRegister("tls.yellow.patch-small", new Option_Bool(false)); 00179 oc.addSynonyme("tls.yellow.patch-small", "patch-small-tyellow", true); 00180 oc.addDescription("tls.yellow.patch-small", "TLS Building", "Given yellow times are patched even if being too short"); 00181 00182 oc.doRegister("tls.yellow.time", new Option_Integer()); 00183 oc.addSynonyme("tls.yellow.time", "traffic-light-yellow", true); 00184 oc.addDescription("tls.yellow.time", "TLS Building", "Set INT as fixed time for yellow phase durations"); 00185 00186 // tls-shifts 00187 oc.doRegister("tls.half-offset", new Option_String()); 00188 oc.addSynonyme("tls.half-offset", "tl-logics.half-offset", true); 00189 oc.addDescription("tls.half-offset", "TLS Building", "TLSs in STR will be shifted by half-phase"); 00190 00191 oc.doRegister("tls.quarter-offset", new Option_String()); 00192 oc.addSynonyme("tls.quarter-offset", "tl-logics.quarter-offset", true); 00193 oc.addDescription("tls.quarter-offset", "TLS Building", "TLSs in STR will be shifted by quarter-phase"); 00194 00195 00196 00197 // edge pruning 00198 oc.doRegister("keep-edges.min-speed", new Option_Float()); 00199 oc.addSynonyme("keep-edges.min-speed", "edges-min-speed", true); 00200 oc.addDescription("keep-edges.min-speed", "Edge Removal", "Remove edges with speed < FLOAT"); 00201 00202 oc.doRegister("remove-edges.explicit", new Option_String()); 00203 oc.addSynonyme("remove-edges.explicit", "remove-edges"); 00204 oc.addDescription("remove-edges.explicit", "Edge Removal", "Remove edges in STR"); 00205 00206 oc.doRegister("keep-edges.explicit", new Option_String()); 00207 oc.addSynonyme("keep-edges.explicit", "keep-edges"); 00208 oc.addDescription("keep-edges.explicit", "Edge Removal", "Remove edges not in STR"); 00209 00210 oc.doRegister("keep-edges.input-file", new Option_FileName()); 00211 oc.addDescription("keep-edges.input-file", "Edge Removal", "Removed edges not in FILE"); 00212 00213 if (!forNetgen) { 00214 oc.doRegister("keep-edges.postload", new Option_Bool(false)); 00215 oc.addDescription("keep-edges.postload", "Edge Removal", "Remove edges after joining"); 00216 } 00217 00218 oc.doRegister("keep-edges.in-boundary", new Option_String()); 00219 oc.addDescription("keep-edges.in-boundary", "Edge Removal", "Keeps edges which are located within the given boundary"); 00220 00221 if (!forNetgen) { 00222 oc.doRegister("keep-edges.by-vclass", new Option_String()); 00223 oc.addDescription("keep-edges.by-vclass", "Edge Removal", "Keep edges that allow any of the vclasss in STR"); 00224 00225 oc.doRegister("remove-edges.by-vclass", new Option_String()); 00226 oc.addDescription("remove-edges.by-vclass", "Edge Removal", "Remove edges where vclass def is not in STR"); 00227 00228 oc.doRegister("remove-edges.isolated", new Option_Bool(false)); 00229 oc.addSynonyme("remove-edges.isolated", "remove-isolated", true); 00230 oc.addDescription("remove-edges.isolated", "Edge Removal", "Removes isolated edges"); 00231 } 00232 00233 00234 // unregulated nodes options 00235 oc.doRegister("keep-nodes-unregulated", new Option_Bool(false)); 00236 oc.addSynonyme("keep-nodes-unregulated", "keep-unregulated"); 00237 oc.addDescription("keep-nodes-unregulated", "Unregulated Nodes", "All nodes will be not regulated"); 00238 00239 oc.doRegister("keep-nodes-unregulated.explicit", new Option_String()); 00240 oc.addSynonyme("keep-nodes-unregulated.explicit", "keep-unregulated.explicit"); 00241 oc.addSynonyme("keep-nodes-unregulated.explicit", "keep-unregulated.nodes", true); 00242 oc.addDescription("keep-nodes-unregulated.explicit", "Unregulated Nodes", "Do not regulate nodes in STR"); 00243 00244 oc.doRegister("keep-nodes-unregulated.district-nodes", new Option_Bool(false)); 00245 oc.addSynonyme("keep-nodes-unregulated.district-nodes", "keep-unregulated.district-nodes"); 00246 oc.addDescription("keep-nodes-unregulated.district-nodes", "Unregulated Nodes", "Do not regulate district nodes"); 00247 00248 00249 // ramp guessing options 00250 if (!forNetgen) { 00251 oc.doRegister("ramps.guess", new Option_Bool(false)); 00252 oc.addSynonyme("ramps.guess", "guess-ramps", true); 00253 oc.addDescription("ramps.guess", "Ramp Guessing", "Enable ramp-guessing"); 00254 00255 oc.doRegister("ramps.max-ramp-speed", new Option_Float(-1)); 00256 oc.addSynonyme("ramps.max-ramp-speed", "ramp-guess.max-ramp-speed", true); 00257 oc.addDescription("ramps.max-ramp-speed", "Ramp Guessing", "Treat edges with speed > FLOAT as no ramps"); 00258 00259 oc.doRegister("ramps.min-highway-speed", new Option_Float((SUMOReal)(79/3.6))); 00260 oc.addSynonyme("ramps.min-highway-speed", "ramp-guess.min-highway-speed", true); 00261 oc.addDescription("ramps.min-highway-speed", "Ramp Guessing", "Treat edges with speed < FLOAT as no highways"); 00262 00263 oc.doRegister("ramps.ramp-length", new Option_Float(100)); 00264 oc.addSynonyme("ramps.ramp-length", "ramp-guess.ramp-length", true); 00265 oc.addDescription("ramps.ramp-length", "Ramp Guessing", "Use FLOAT as ramp-length"); 00266 00267 oc.doRegister("ramps.set", new Option_String()); 00268 oc.addSynonyme("ramps.set", "ramp-guess.explicite", true); 00269 oc.addDescription("ramps.set", "Ramp Guessing", "Tries to handle the given edges as ramps"); 00270 } 00271 } 00272 00273 00274 bool 00275 NBFrame::checkOptions() { 00276 OptionsCont& oc = OptionsCont::getOptions(); 00277 // 00278 if (!oc.isDefault("tls-guess.joining")) { 00279 WRITE_WARNING("'--tls-guess.joining' was joined with '--tls.join'.\n Please use '--tls.join' in future only."); 00280 if (!oc.isSet("tls.join")) { 00281 oc.set("tls.join", "true"); 00282 } 00283 } 00284 return true; 00285 } 00286 00287 00288 /****************************************************************************/