Definition in file polyconvert_main.cpp.
#include <config.h>
#include <iostream>
#include <string>
#include <utils/options/OptionsIO.h>
#include <utils/options/OptionsCont.h>
#include <utils/common/UtilExceptions.h>
#include <utils/common/StringTokenizer.h>
#include <utils/common/SystemFrame.h>
#include <utils/common/MsgHandler.h>
#include <utils/common/TplConvert.h>
#include <utils/common/ToString.h>
#include <utils/importio/LineReader.h>
#include <utils/geom/GeomConvHelper.h>
#include <utils/geom/Boundary.h>
#include <polyconvert/PCLoaderVisum.h>
#include <polyconvert/PCLoaderDlrNavteq.h>
#include <polyconvert/PCLoaderXML.h>
#include <polyconvert/PCLoaderOSM.h>
#include <polyconvert/PCLoaderArcView.h>
#include <polyconvert/PCTypeMap.h>
#include <polyconvert/PCTypeDefHandler.h>
#include <polyconvert/PCNetProjectionLoader.h>
#include <utils/xml/XMLSubSys.h>
#include <utils/geom/GeoConvHelper.h>
Go to the source code of this file.
Functions | |
| void | fillOptions () throw () |
| int | main (int argc, char **argv) |
| void fillOptions | ( | ) | throw () |
Definition at line 67 of file polyconvert_main.cpp.
References OptionsCont::addCallExample(), SystemFrame::addConfigurationOptions(), OptionsCont::addDescription(), OptionsCont::addOptionSubTopic(), GeoConvHelper::addProjectionOptions(), SystemFrame::addReportOptions(), OptionsCont::addSynonyme(), OptionsCont::doRegister(), and OptionsCont::getOptions().
00067 { 00068 OptionsCont &oc = OptionsCont::getOptions(); 00069 oc.addCallExample("-c <CONFIGURATION>"); 00070 00071 // insert options sub-topics 00072 SystemFrame::addConfigurationOptions(oc); // fill this subtopic, too 00073 oc.addOptionSubTopic("Input"); 00074 oc.addOptionSubTopic("Output"); 00075 GeoConvHelper::addProjectionOptions(oc); 00076 oc.addOptionSubTopic("Pruning"); 00077 oc.addOptionSubTopic("Processing"); 00078 oc.addOptionSubTopic("Building Defaults"); 00079 SystemFrame::addReportOptions(oc); // fill this subtopic, too 00080 00081 00082 // register options 00083 // add i/o options 00084 // original network 00085 oc.doRegister("net-file", 'n', new Option_FileName()); 00086 oc.addSynonyme("net-file", "net"); 00087 oc.addDescription("net-file", "Input", "Loads SUMO-network FILE as reference to offset and projection"); 00088 00089 // dlrnavteq import 00090 oc.doRegister("dlr-navteq-poly-files", new Option_FileName()); 00091 oc.addDescription("dlr-navteq-poly-files", "Input", "Reads polygons from FILE assuming they're coded in DLR-Navteq (Elmar)-format"); 00092 oc.doRegister("dlr-navteq-poi-files", new Option_FileName()); 00093 oc.addDescription("dlr-navteq-poi-files", "Input", "Reads pois from FILE+ assuming they're coded in DLR-Navteq (Elmar)-format"); 00094 00095 // visum import 00096 oc.doRegister("visum-files", new Option_FileName()); 00097 oc.addSynonyme("visum-files", "visum"); 00098 oc.addDescription("visum-files", "Input", "Reads polygons from FILE assuming it's a Visum-net"); 00099 00100 // xml import 00101 oc.doRegister("xml", new Option_FileName()); 00102 oc.addDescription("xml", "Input", "Reads pois from FILE assuming they're coded in XML"); 00103 00104 // osm import 00105 oc.doRegister("osm-files", new Option_FileName()); 00106 oc.addSynonyme("osm-files", "osm"); 00107 oc.addDescription("osm-files", "Input", "Reads pois from FILE+ assuming they're coded in OSM"); 00108 oc.doRegister("osm.keep-full-type", new Option_Bool(false)); 00109 oc.addDescription("osm.keep-full-type", "Input", "The type will be made of the key-value - pair."); 00110 00111 // arcview import 00112 oc.doRegister("shapefile", new Option_FileName()); 00113 oc.addSynonyme("shapefile", "shape-files"); 00114 oc.addSynonyme("shapefile", "shape"); 00115 oc.addDescription("shapefile", "Input", "Reads shapes from shape-files FILE+"); 00116 oc.doRegister("shapefile.guess-projection", new Option_Bool(false)); 00117 oc.addSynonyme("shapefile.guess-projection", "arcview.guess-projection"); 00118 oc.addDescription("shapefile.guess-projection", "Input", "Guesses the shapefile's projection"); 00119 oc.doRegister("shapefile.id-name", new Option_FileName()); 00120 oc.addDescription("shapefile.id-name", "Input", "Defines where to find the id"); 00121 00122 // typemap reading 00123 oc.doRegister("typemap", new Option_FileName()); 00124 oc.addDescription("typemap", "Input", "Reads types from FILE"); 00125 00126 00127 // output 00128 oc.doRegister("output", 'o', new Option_FileName("polygons.xml")); 00129 oc.addDescription("output", "Output", "Write generated polygons/pois to FILE"); 00130 00131 00132 // prunning options 00133 oc.doRegister("prune.on-net", new Option_Bool(false)); 00134 oc.addDescription("prune.on-net", "Pruning", "Enables pruning on net boundaries"); 00135 00136 oc.doRegister("prune.on-net.offsets", new Option_String("0;0;0;0")); 00137 oc.addDescription("prune.on-net.offsets", "Pruning", "Uses STR as offset definition added to the net boundaries"); 00138 00139 oc.doRegister("prune.boundary", new Option_String()); 00140 oc.addDescription("prune.boundary", "Pruning", "Uses STR as pruning boundary"); 00141 00142 oc.doRegister("prune.ignore", new Option_String()); 00143 oc.addDescription("prune.ignore", "Pruning", "Items in STR will be kept though out of boundary"); 00144 00145 oc.doRegister("remove", new Option_String("")); 00146 oc.addDescription("remove", "Pruning", "Items with names in STR will be removed"); 00147 00148 00149 oc.doRegister("x-offset-to-apply", new Option_Float(0)); 00150 oc.addDescription("x-offset-to-apply", "Processing", "Adds FLOAT to net x-positions"); 00151 00152 oc.doRegister("y-offset-to-apply", new Option_Float(0)); 00153 oc.addDescription("y-offset-to-apply", "Processing", "Adds FLOAT to net y-positions"); 00154 00155 00156 // building defaults options 00157 oc.doRegister("color", new Option_String("0.2,0.5,1.")); 00158 oc.addDescription("color", "Building Defaults", "Sets STR as default color"); 00159 00160 oc.doRegister("prefix", new Option_String("")); 00161 oc.addDescription("prefix", "Building Defaults", "Sets STR as default prefix"); 00162 00163 oc.doRegister("type", new Option_String("unknown")); 00164 oc.addDescription("type", "Building Defaults", "Sets STR as default type"); 00165 00166 oc.doRegister("layer", new Option_Integer(-1)); 00167 oc.addDescription("layer", "Building Defaults", "Sets INT as default layer"); 00168 }
| int main | ( | int | argc, | |
| char ** | argv | |||
| ) |
Definition at line 172 of file polyconvert_main.cpp.
References SystemFrame::close(), fillOptions(), OptionsCont::getBool(), MsgHandler::getErrorInstance(), OptionsIO::getOptions(), OptionsCont::getOptions(), OptionsCont::getString(), OptionsCont::getStringVector(), MsgHandler::inform(), GeoConvHelper::init(), XMLSubSys::init(), MsgHandler::initOutputOptions(), OptionsCont::isDefault(), OptionsCont::isSet(), PCLoaderArcView::loadIfSet(), PCLoaderVisum::loadIfSet(), PCLoaderDlrNavteq::loadIfSet(), PCLoaderOSM::loadIfSet(), PCLoaderXML::loadIfSet(), PCNetProjectionLoader::loadIfSet(), GeomConvHelper::parseBoundaryReporting(), OptionsCont::processMetaOptions(), XMLSubSys::runParser(), OptionsCont::set(), OptionsCont::setApplicationDescription(), OptionsCont::setApplicationName(), toString(), Position2D::x(), Boundary::xmax(), Boundary::xmin(), Position2D::y(), Boundary::ymax(), and Boundary::ymin().
00172 { 00173 OptionsCont &oc = OptionsCont::getOptions(); 00174 oc.setApplicationDescription("Importer of polygons and POIs for the road traffic simulation SUMO."); 00175 oc.setApplicationName("polyconvert", "SUMO polyconvert Version " + (std::string)VERSION_STRING); 00176 int ret = 0; 00177 try { 00178 // initialise subsystems 00179 XMLSubSys::init(false); 00180 fillOptions(); 00181 OptionsIO::getOptions(true, argc, argv); 00182 if (oc.processMetaOptions(argc < 2)) { 00183 SystemFrame::close(); 00184 return 0; 00185 } 00186 MsgHandler::initOutputOptions(); 00187 // build the projection 00188 Boundary origNetBoundary, pruningBoundary; 00189 Position2D netOffset; 00190 std::string proj; 00191 PCNetProjectionLoader::loadIfSet(oc, netOffset, origNetBoundary, pruningBoundary, proj); 00192 if (proj != "") { 00193 if (oc.isDefault("proj")) { 00194 oc.set("proj", proj); 00195 } 00196 if (oc.isDefault("x-offset-to-apply")) { 00197 oc.set("x-offset-to-apply", toString(netOffset.x())); 00198 } 00199 if (oc.isDefault("y-offset-to-apply")) { 00200 oc.set("y-offset-to-apply", toString(netOffset.y())); 00201 } 00202 } 00203 #ifdef HAVE_PROJ 00204 unsigned numProjections = oc.getBool("proj.simple") + oc.getBool("proj.utm") + oc.getBool("proj.dhdn") + (oc.getString("proj").length() > 1); 00205 if ((oc.isSet("osm-files") || oc.isSet("dlr-navteq-poly-files") || oc.isSet("dlr-navteq-poi-files")) && numProjections == 0) { 00206 oc.set("proj.utm", true); 00207 } 00208 if ((oc.isSet("dlr-navteq-poly-files") || oc.isSet("dlr-navteq-poi-files")) && oc.isDefault("proj.shift")) { 00209 oc.set("proj.shift", std::string("5")); 00210 } 00211 #endif 00212 if (!GeoConvHelper::init(oc)) { 00213 throw ProcessError("Could not build projection!"); 00214 } 00215 00216 // check whether the input shall be pruned 00217 bool prune = false; 00218 if (oc.getBool("prune.on-net")) { 00219 if (!oc.isSet("net")) { 00220 throw ProcessError("In order to prune the input on the net, you have to supply a network."); 00221 } 00222 bool ok = true; 00223 // !!! no proper error handling 00224 Boundary offsets = GeomConvHelper::parseBoundaryReporting(oc.getString("prune.on-net.offsets"), "--prune.on-net.offsets", 0, ok); 00225 pruningBoundary = Boundary( 00226 pruningBoundary.xmin()+offsets.xmin(), 00227 pruningBoundary.ymin()+offsets.ymin(), 00228 pruningBoundary.xmax()+offsets.xmax(), 00229 pruningBoundary.ymax()+offsets.ymax()); 00230 prune = true; 00231 } 00232 if (oc.isSet("prune.boundary")) { 00233 bool ok = true; 00234 // !!! no proper error handling 00235 pruningBoundary = GeomConvHelper::parseBoundaryReporting(oc.getString("prune.boundary"), "--prune.boundary", 0, ok); 00236 prune = true; 00237 } 00238 00239 PCPolyContainer toFill(prune, pruningBoundary, oc.getStringVector("remove")); 00240 00241 // read in the type defaults 00242 PCTypeMap tm; 00243 if (oc.isSet("typemap")) { 00244 PCTypeDefHandler handler(oc, tm); 00245 if (!XMLSubSys::runParser(handler, oc.getString("typemap"))) { 00246 // something failed 00247 throw ProcessError(); 00248 } 00249 } 00250 00251 // read in the data 00252 PCLoaderXML::loadIfSet(oc, toFill, tm); // SUMO-XML 00253 PCLoaderOSM::loadIfSet(oc, toFill, tm); // OSM-XML 00254 PCLoaderDlrNavteq::loadIfSet(oc, toFill, tm); // Elmar-files 00255 PCLoaderVisum::loadIfSet(oc, toFill, tm); // VISUM 00256 PCLoaderArcView::loadIfSet(oc, toFill, tm); // shape-files 00257 // check whether any errors occured 00258 if (!MsgHandler::getErrorInstance()->wasInformed()) { 00259 // no? ok, save 00260 toFill.save(oc.getString("output")); 00261 } else { 00262 throw ProcessError(); 00263 } 00264 } catch (ProcessError &e) { 00265 if (std::string(e.what())!=std::string("Process Error") && std::string(e.what())!=std::string("")) { 00266 MsgHandler::getErrorInstance()->inform(e.what()); 00267 } 00268 MsgHandler::getErrorInstance()->inform("Quitting (on error).", false); 00269 ret = 1; 00270 #ifndef _DEBUG 00271 } catch (...) { 00272 MsgHandler::getErrorInstance()->inform("Quitting (on unknown error).", false); 00273 ret = 1; 00274 #endif 00275 } 00276 SystemFrame::close(); 00277 // report about ending 00278 if (ret==0) { 00279 std::cout << "Success." << std::endl; 00280 } 00281 return ret; 00282 }
1.5.6