SUMO - Simulation of Urban MObility
|
00001 /****************************************************************************/ 00009 // Sets and checks options for netimport 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 <iostream> 00035 #include <fstream> 00036 #include <utils/options/Option.h> 00037 #include <utils/options/OptionsCont.h> 00038 #include <utils/options/OptionsIO.h> 00039 #include <utils/common/MsgHandler.h> 00040 #include <utils/common/ToString.h> 00041 #include "NIFrame.h" 00042 #include <utils/common/FileHelpers.h> 00043 #include <utils/common/UtilExceptions.h> 00044 #include <utils/common/RandHelper.h> 00045 #include <netbuild/NBNetBuilder.h> 00046 #include <netwrite/NWFrame.h> 00047 #include <utils/common/SystemFrame.h> 00048 00049 #ifdef CHECK_MEMORY_LEAKS 00050 #include <foreign/nvwa/debug_new.h> 00051 #endif // CHECK_MEMORY_LEAKS 00052 00053 00054 // =========================================================================== 00055 // method definitions 00056 // =========================================================================== 00057 void 00058 NIFrame::fillOptions() { 00059 OptionsCont& oc = OptionsCont::getOptions(); 00060 // register input formats 00061 oc.doRegister("sumo-net-file", 's', new Option_FileName()); 00062 oc.addSynonyme("sumo-net-file", "sumo-net", true); 00063 oc.addDescription("sumo-net-file", "Input", "Read SUMO-net from FILE"); 00064 00065 oc.doRegister("node-files", 'n', new Option_FileName()); 00066 oc.addSynonyme("node-files", "xml-node-files", true); 00067 oc.addSynonyme("node-files", "xml-nodes", true); 00068 oc.addSynonyme("node-files", "nodes"); 00069 oc.addDescription("node-files", "Input", "Read XML-node defs from FILE"); 00070 00071 oc.doRegister("edge-files", 'e', new Option_FileName()); 00072 oc.addSynonyme("edge-files", "xml-edge-files", true); 00073 oc.addSynonyme("edge-files", "xml-edges", true); 00074 oc.addSynonyme("edge-files", "edges"); 00075 oc.addDescription("edge-files", "Input", "Read XML-edge defs from FILE"); 00076 00077 oc.doRegister("connection-files", 'x', new Option_FileName()); 00078 oc.addSynonyme("connection-files", "xml-connection-files", true); 00079 oc.addSynonyme("connection-files", "xml-connections", true); 00080 oc.addSynonyme("connection-files", "connections"); 00081 oc.addDescription("connection-files", "Input", "Read XML-connection defs from FILE"); 00082 00083 oc.doRegister("tllogic-files", 'i', new Option_FileName()); 00084 oc.addDescription("tllogic-files", "Input", "Read XML-traffic light defs from FILE"); 00085 00086 oc.doRegister("type-files", 't', new Option_FileName()); 00087 oc.addSynonyme("type-files", "xml-type-files", true); 00088 oc.addSynonyme("type-files", "xml-types", true); 00089 oc.addSynonyme("type-files", "types"); 00090 oc.addDescription("type-files", "Input", "Read XML-type defs from FILE"); 00091 00092 oc.doRegister("shapefile-prefix", new Option_FileName()); 00093 oc.addSynonyme("shapefile-prefix", "shapefile"); 00094 oc.addSynonyme("shapefile-prefix", "arcview", true); 00095 oc.addSynonyme("shapefile-prefix", "tiger", true); 00096 oc.addDescription("shapefile-prefix", "Input", "Read shapefiles (ArcView, Tiger, ...) from files starting with 'FILE'"); 00097 00098 oc.doRegister("dlr-navteq-prefix", new Option_FileName()); 00099 oc.addSynonyme("dlr-navteq-prefix", "dlr-navteq"); 00100 oc.addSynonyme("dlr-navteq-prefix", "elmar2", true); 00101 oc.addDescription("dlr-navteq-prefix", "Input", "Read converted Navteq GDF data (unsplitted Elmar-network) from path 'FILE'"); 00102 00103 oc.doRegister("osm-files", new Option_FileName()); 00104 oc.addSynonyme("osm-files", "osm"); 00105 oc.addDescription("osm-files", "Input", "Read OSM-network from path 'FILE(s)'"); 00106 00107 oc.doRegister("opendrive-files", new Option_FileName()); 00108 oc.addSynonyme("opendrive-files", "opendrive"); 00109 oc.addDescription("opendrive-files", "Input", "Read openDrive-network from FILE"); 00110 00111 oc.doRegister("visum-file", new Option_FileName()); 00112 oc.addSynonyme("visum-file", "visum"); 00113 oc.addDescription("visum-file", "Input", "Read VISUM-net from FILE"); 00114 00115 oc.doRegister("vissim-file", new Option_FileName()); 00116 oc.addSynonyme("vissim-file", "vissim"); 00117 oc.addDescription("vissim-file", "Input", "Read VISSIM-net from FILE"); 00118 00119 oc.doRegister("robocup-dir", new Option_FileName()); 00120 oc.addSynonyme("robocup-dir", "robocup-net", true); 00121 oc.addSynonyme("robocup-dir", "robocup"); 00122 oc.addDescription("robocup-dir", "Input", "Read RoboCup-net from DIR"); 00123 00124 oc.doRegister("matsim-files", new Option_FileName()); 00125 oc.addSynonyme("matsim-files", "matsim"); 00126 oc.addDescription("matsim-files", "Input", "Read MATsim-net from FILE"); 00127 00128 oc.doRegister("itsumo-files", new Option_FileName()); 00129 oc.addSynonyme("itsumo-files", "itsumo"); 00130 oc.addDescription("itsumo-files", "Input", "Read ITSUMO-net from FILE"); 00131 00132 #ifdef HAVE_MESOSIM // catchall for internal stuff 00133 oc.doRegister("heightmap.shapefiles", new Option_FileName()); 00134 oc.addDescription("heightmap.shapefiles", "Input", "Read heightmap from ArcGIS shapefile"); 00135 #endif // have HAVE_MESOSIM 00136 00137 // register basic processing options 00138 oc.doRegister("ignore-errors", new Option_Bool(false)); 00139 oc.addSynonyme("ignore-errors", "dismiss-loading-errors", true); 00140 oc.addDescription("ignore-errors", "Processing", "Continue on broken input"); 00141 00142 oc.doRegister("ignore-errors.connections", new Option_Bool(false)); 00143 oc.addDescription("ignore-errors.connections", "Processing", "Continue on invalid connections"); 00144 00145 oc.doRegister("lanes-from-capacity.norm", new Option_Float((SUMOReal) 1800)); 00146 oc.addSynonyme("lanes-from-capacity.norm", "capacity-norm"); 00147 oc.addDescription("lanes-from-capacity.norm", "Processing", "The factor for flow to no. lanes conversion."); 00148 00149 oc.doRegister("speed-in-kmh", new Option_Bool(false)); 00150 oc.addDescription("speed-in-kmh", "Processing", "vmax is parsed as given in km/h (some)"); 00151 00152 00153 // register xml options 00154 oc.doRegister("plain.keep-edge-shape", new Option_Bool(false)); 00155 oc.addSynonyme("plain.keep-edge-shape", "xml.keep-shape", true); 00156 oc.addDescription("plain.keep-edge-shape", "Processing", "No node positions are added to the edge shape"); 00157 00158 00159 // register matsim options 00160 oc.doRegister("matsim.keep-length", new Option_Bool(false)); 00161 oc.addDescription("matsim.keep-length", "Processing", "The edge lengths given in the MATSIM-file will be kept."); 00162 00163 oc.doRegister("matsim.lanes-from-capacity", new Option_Bool(false)); 00164 oc.addDescription("matsim.lanes-from-capacity", "Processing", "The lane number will be computed from the capacity."); 00165 00166 00167 // register shapefile options 00168 oc.doRegister("shapefile.street-id", new Option_String()); 00169 oc.addSynonyme("shapefile.street-id", "arcview.street-id", true); 00170 oc.addDescription("shapefile.street-id", "Processing", "Read edge ids from column STR"); 00171 00172 oc.doRegister("shapefile.from-id", new Option_String()); 00173 oc.addSynonyme("shapefile.from-id", "arcview.from-id", true); 00174 oc.addDescription("shapefile.from-id", "Processing", "Read from-node ids from column STR"); 00175 00176 oc.doRegister("shapefile.to-id", new Option_String()); 00177 oc.addSynonyme("shapefile.to-id", "arcview.to-id", true); 00178 oc.addDescription("shapefile.to-id", "Processing", "Read to-node ids from column STR"); 00179 00180 oc.doRegister("shapefile.type-id", new Option_String()); 00181 oc.addSynonyme("shapefile.type-id", "arcview.type-id", true); 00182 oc.addDescription("shapefile.type-id", "Processing", "Read type ids from column STR"); 00183 00184 oc.doRegister("shapefile.use-defaults-on-failure", new Option_Bool(false)); 00185 oc.addSynonyme("shapefile.use-defaults-on-failure", "arcview.use-defaults-on-failure", true); 00186 oc.addDescription("shapefile.use-defaults-on-failure", "Processing", "Uses edge type defaults on problems"); 00187 00188 oc.doRegister("shapefile.all-bidirectional", new Option_Bool(false)); 00189 oc.addSynonyme("shapefile.all-bidirectional", "shapefile.all-bidi"); 00190 oc.addSynonyme("shapefile.all-bidirectional", "arcview.all-bidi", true); 00191 oc.addDescription("shapefile.all-bidirectional", "Processing", "Insert edges in both directions"); 00192 00193 oc.doRegister("shapefile.guess-projection", new Option_Bool(false)); 00194 oc.addSynonyme("shapefile.guess-projection", "arcview.guess-projection", true); 00195 oc.addDescription("shapefile.guess-projection", "Processing", "Guess the proper projection"); 00196 00197 00198 // register vissim options 00199 oc.doRegister("vissim.join-distance", new Option_Float(5.0f)); 00200 oc.addSynonyme("vissim.join-distance", "vissim.offset", true); 00201 oc.addDescription("vissim.join-distance", "Processing", "Structure join offset"); 00202 00203 oc.doRegister("vissim.default-speed", new Option_Float(50.0f)); 00204 oc.addDescription("vissim.default-speed", "Processing", "Use FLOAT as default speed"); 00205 00206 oc.doRegister("vissim.speed-norm", new Option_Float(1.0f)); 00207 oc.addDescription("vissim.speed-norm", "Processing", "Factor for edge velocity"); 00208 00209 oc.doRegister("vissim.report-unset-speeds", new Option_Bool(false)); 00210 oc.addDescription("vissim.report-unset-speeds", "Processing", "Writes lanes without an explicit speed set."); 00211 00212 00213 // register visum options 00214 oc.doRegister("visum.use-type-priority", new Option_Bool(false)); 00215 oc.addDescription("visum.use-type-priority", "Processing", "Uses priorities from types"); 00216 00217 oc.doRegister("visum.use-type-laneno", new Option_Bool(false)); 00218 oc.addDescription("visum.use-type-laneno", "Processing", "Uses lane numbers from types"); 00219 00220 oc.doRegister("visum.use-type-speed", new Option_Bool(false)); 00221 oc.addDescription("visum.use-type-speed", "Processing", "Uses speeds from types"); 00222 00223 oc.doRegister("visum.connector-speeds", new Option_Float(100.)); 00224 oc.addDescription("visum.connector-speeds", "Processing", "Sets connector speed"); 00225 00226 oc.doRegister("visum.connectors-lane-number", new Option_Integer(3)); 00227 oc.addSynonyme("visum.connectors-lane-number", "visum.connector-laneno", true); 00228 oc.addDescription("visum.connectors-lane-number", "Processing", "Sets connector lane number"); 00229 00230 oc.doRegister("visum.no-connectors", new Option_Bool(false)); 00231 oc.addDescription("visum.no-connectors", "Processing", "Excludes connectors"); 00232 00233 oc.doRegister("visum.recompute-lane-number", new Option_Bool(false)); 00234 oc.addSynonyme("visum.recompute-lane-number", "visum.recompute-laneno", true); 00235 oc.addDescription("visum.recompute-lane-number", "Processing", "Computes the number of lanes from the edges' capacities"); 00236 00237 oc.doRegister("visum.verbose-warnings", new Option_Bool(false)); 00238 oc.addDescription("visum.verbose-warnings", "Processing", "Prints all warnings, some of which are due to VISUM misbehaviour"); 00239 00240 00241 // register osm options 00242 oc.doRegister("osm.skip-duplicates-check", new Option_Bool(false)); 00243 oc.addDescription("osm.skip-duplicates-check", "Processing", "Skips the check for duplicate nodes and edges."); 00244 00245 oc.doRegister("osm.discard-tls", new Option_Bool(false)); 00246 oc.addDescription("osm.discard-tls", "Processing", "Discards all traffic lights."); 00247 } 00248 00249 00250 bool 00251 NIFrame::checkOptions() { 00252 OptionsCont& oc = OptionsCont::getOptions(); 00253 bool ok = oc.checkDependingSuboptions("shapefile", "shapefile."); 00254 ok &= oc.checkDependingSuboptions("visum-file", "visum."); 00255 ok &= oc.checkDependingSuboptions("vissim-file", "vissim."); 00256 #ifdef HAVE_PROJ 00257 unsigned numProjections = oc.getBool("simple-projection") + oc.getBool("proj.utm") + oc.getBool("proj.dhdn") + (oc.getString("proj").length() > 1); 00258 if ((oc.isSet("osm-files") || oc.isSet("dlr-navteq-prefix") || oc.isSet("shapefile-prefix")) && numProjections == 0) { 00259 if(oc.isDefault("proj")) { 00260 oc.set("proj.utm", "true"); 00261 } 00262 } 00263 if (oc.isSet("dlr-navteq-prefix") && oc.isDefault("proj.scale")) { 00264 oc.set("proj.scale", std::string("5")); 00265 } 00266 #endif 00267 if (oc.isSet("sumo-net-file")) { 00268 if (oc.isWriteable("no-turnarounds")) { 00269 // changed default since turnarounds are loaded from the net file. 00270 oc.set("no-turnarounds", "true"); 00271 } 00272 if (oc.isWriteable("offset.disable-normalization")) { 00273 // changed default since we wish to preserve the network as far as possible 00274 oc.set("offset.disable-normalization", "true"); 00275 } 00276 } 00277 return ok; 00278 } 00279 00280 00281 00282 /****************************************************************************/ 00283