|
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 00144 // tls setting options 00145 // explicit tls 00146 oc.doRegister("tls.set", new Option_String()); 00147 oc.addSynonyme("tls.set", "explicite-tls", true); 00148 oc.addDescription("tls.set", "TLS Building", "Interprets STR as list of junctions to be controlled by TLS"); 00149 00150 oc.doRegister("tls.unset", new Option_String()); 00151 oc.addSynonyme("tls.unset", "explicite-no-tls", true); 00152 oc.addDescription("tls.unset", "TLS Building", "Interprets STR as list of junctions to be not controlled by TLS"); 00153 00154 // tls-guessing 00155 oc.doRegister("tls.guess", new Option_Bool(false)); 00156 oc.addSynonyme("tls.guess", "guess-tls", true); 00157 oc.addDescription("tls.guess", "TLS Building", "Turns on TLS guessing"); 00158 00159 if (!forNetgen) { 00160 oc.doRegister("tls.taz-nodes", new Option_Bool(false)); 00161 oc.addSynonyme("tls.taz-nodes", "tls-guess.district-nodes", true); 00162 oc.addDescription("tls.taz-nodes", "TLS Building", "Sets district nodes as tls-controlled"); // !!! describe 00163 } 00164 00165 oc.doRegister("tls-guess.joining", new Option_Bool(false)); 00166 oc.addDescription("tls-guess.joining", "TLS Building", "Includes node clusters into guess"); // !!! describe 00167 00168 oc.doRegister("tls.join", new Option_Bool(false)); 00169 oc.addSynonyme("tls.join", "try-join-tls", true); 00170 oc.addDescription("tls.join", "TLS Building", "Tries to cluster tls-controlled nodes"); // !!! describe 00171 00172 // computational 00173 oc.doRegister("tls.green.time", new Option_Integer(31)); 00174 oc.addSynonyme("tls.green.time", "traffic-light-green", true); 00175 oc.addDescription("tls.green.time", "TLS Building", "Use INT as green phase duration"); 00176 00177 oc.doRegister("tls.yellow.min-decel", 'D', new Option_Float(3.0)); 00178 oc.addSynonyme("tls.yellow.min-decel", "min-decel", true); 00179 oc.addDescription("tls.yellow.min-decel", "TLS Building", "Defines smallest vehicle deceleration"); 00180 00181 oc.doRegister("tls.yellow.patch-small", new Option_Bool(false)); 00182 oc.addSynonyme("tls.yellow.patch-small", "patch-small-tyellow", true); 00183 oc.addDescription("tls.yellow.patch-small", "TLS Building", "Given yellow times are patched even if being too short"); 00184 00185 oc.doRegister("tls.yellow.time", new Option_Integer()); 00186 oc.addSynonyme("tls.yellow.time", "traffic-light-yellow", true); 00187 oc.addDescription("tls.yellow.time", "TLS Building", "Set INT as fixed time for yellow phase durations"); 00188 00189 // tls-shifts 00190 oc.doRegister("tls.half-offset", new Option_String()); 00191 oc.addSynonyme("tls.half-offset", "tl-logics.half-offset", true); 00192 oc.addDescription("tls.half-offset", "TLS Building", "TLSs in STR will be shifted by half-phase"); 00193 00194 oc.doRegister("tls.quarter-offset", new Option_String()); 00195 oc.addSynonyme("tls.quarter-offset", "tl-logics.quarter-offset", true); 00196 oc.addDescription("tls.quarter-offset", "TLS Building", "TLSs in STR will be shifted by quarter-phase"); 00197 00198 00199 00200 // edge pruning 00201 oc.doRegister("keep-edges.min-speed", new Option_Float()); 00202 oc.addSynonyme("keep-edges.min-speed", "edges-min-speed", true); 00203 oc.addDescription("keep-edges.min-speed", "Edge Removal", "Only keep edges with speed > FLOAT"); 00204 00205 oc.doRegister("remove-edges.explicit", new Option_String()); 00206 oc.addSynonyme("remove-edges.explicit", "remove-edges"); 00207 oc.addDescription("remove-edges.explicit", "Edge Removal", "Remove edges in STR"); 00208 00209 oc.doRegister("keep-edges.explicit", new Option_String()); 00210 oc.addSynonyme("keep-edges.explicit", "keep-edges"); 00211 oc.addDescription("keep-edges.explicit", "Edge Removal", "Only keep edges in STR"); 00212 00213 oc.doRegister("keep-edges.input-file", new Option_FileName()); 00214 oc.addDescription("keep-edges.input-file", "Edge Removal", "Only keep edges in FILE"); 00215 00216 if (!forNetgen) { 00217 oc.doRegister("keep-edges.postload", new Option_Bool(false)); 00218 oc.addDescription("keep-edges.postload", "Edge Removal", "Remove edges after joining"); 00219 } 00220 00221 oc.doRegister("keep-edges.in-boundary", new Option_String()); 00222 oc.addDescription("keep-edges.in-boundary", "Edge Removal", "Only keep edges which are located within the given boundary"); 00223 00224 if (!forNetgen) { 00225 oc.doRegister("keep-edges.by-vclass", new Option_String()); 00226 oc.addDescription("keep-edges.by-vclass", "Edge Removal", "Only keep edges which allow one of the vclasss in STR"); 00227 00228 oc.doRegister("remove-edges.by-vclass", new Option_String()); 00229 oc.addDescription("remove-edges.by-vclass", "Edge Removal", "Remove edges which allow only vclasses from STR"); 00230 00231 oc.doRegister("keep-edges.by-type", new Option_String()); 00232 oc.addDescription("keep-edges.by-type", "Edge Removal", "Only keep edges where type is in STR"); 00233 00234 oc.doRegister("remove-edges.by-type", new Option_String()); 00235 oc.addDescription("remove-edges.by-type", "Edge Removal", "Remove edges where type is in STR"); 00236 00237 oc.doRegister("remove-edges.isolated", new Option_Bool(false)); 00238 oc.addSynonyme("remove-edges.isolated", "remove-isolated", true); 00239 oc.addDescription("remove-edges.isolated", "Edge Removal", "Removes isolated edges"); 00240 } 00241 00242 00243 // unregulated nodes options 00244 oc.doRegister("keep-nodes-unregulated", new Option_Bool(false)); 00245 oc.addSynonyme("keep-nodes-unregulated", "keep-unregulated"); 00246 oc.addDescription("keep-nodes-unregulated", "Unregulated Nodes", "All nodes will be unregulated"); 00247 00248 oc.doRegister("keep-nodes-unregulated.explicit", new Option_String()); 00249 oc.addSynonyme("keep-nodes-unregulated.explicit", "keep-unregulated.explicit"); 00250 oc.addSynonyme("keep-nodes-unregulated.explicit", "keep-unregulated.nodes", true); 00251 oc.addDescription("keep-nodes-unregulated.explicit", "Unregulated Nodes", "Do not regulate nodes in STR"); 00252 00253 oc.doRegister("keep-nodes-unregulated.district-nodes", new Option_Bool(false)); 00254 oc.addSynonyme("keep-nodes-unregulated.district-nodes", "keep-unregulated.district-nodes"); 00255 oc.addDescription("keep-nodes-unregulated.district-nodes", "Unregulated Nodes", "Do not regulate district nodes"); 00256 00257 00258 // ramp guessing options 00259 if (!forNetgen) { 00260 oc.doRegister("ramps.guess", new Option_Bool(false)); 00261 oc.addSynonyme("ramps.guess", "guess-ramps", true); 00262 oc.addDescription("ramps.guess", "Ramp Guessing", "Enable ramp-guessing"); 00263 00264 oc.doRegister("ramps.max-ramp-speed", new Option_Float(-1)); 00265 oc.addSynonyme("ramps.max-ramp-speed", "ramp-guess.max-ramp-speed", true); 00266 oc.addDescription("ramps.max-ramp-speed", "Ramp Guessing", "Treat edges with speed > FLOAT as no ramps"); 00267 00268 oc.doRegister("ramps.min-highway-speed", new Option_Float((SUMOReal)(79 / 3.6))); 00269 oc.addSynonyme("ramps.min-highway-speed", "ramp-guess.min-highway-speed", true); 00270 oc.addDescription("ramps.min-highway-speed", "Ramp Guessing", "Treat edges with speed < FLOAT as no highways"); 00271 00272 oc.doRegister("ramps.ramp-length", new Option_Float(100)); 00273 oc.addSynonyme("ramps.ramp-length", "ramp-guess.ramp-length", true); 00274 oc.addDescription("ramps.ramp-length", "Ramp Guessing", "Use FLOAT as ramp-length"); 00275 00276 oc.doRegister("ramps.set", new Option_String()); 00277 oc.addSynonyme("ramps.set", "ramp-guess.explicite", true); 00278 oc.addDescription("ramps.set", "Ramp Guessing", "Tries to handle the given edges as ramps"); 00279 } 00280 } 00281 00282 00283 bool 00284 NBFrame::checkOptions() { 00285 OptionsCont& oc = OptionsCont::getOptions(); 00286 // 00287 if (!oc.isDefault("tls-guess.joining")) { 00288 WRITE_WARNING("'--tls-guess.joining' was joined with '--tls.join'.\n Please use '--tls.join' in future only."); 00289 if (!oc.isSet("tls.join")) { 00290 oc.set("tls.join", "true"); 00291 } 00292 } 00293 return true; 00294 } 00295 00296 00297 /****************************************************************************/