polyconvert_main.cpp File Reference


Detailed Description

Author:
Daniel Krajzewicz
Date:
Mon, 05 Dec 2005
Version:
Id
polyconvert_main.cpp 8386 2010-03-05 22:29:33Z behrisch

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)


Function Documentation

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 }


Generated on Wed May 5 00:06:39 2010 for Sumo - Simulation of Urban MObility by  doxygen 1.5.6