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