SUMO - Simulation of Urban MObility
NIImporter_Vissim.cpp
Go to the documentation of this file.
00001 /****************************************************************************/
00009 // -------------------
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 
00034 #include <string>
00035 #include <fstream>
00036 #include <utils/common/StringUtils.h>
00037 #include <utils/common/TplConvert.h>
00038 #include <utils/common/MsgHandler.h>
00039 #include <utils/options/OptionsCont.h>
00040 #include <netbuild/NBNetBuilder.h>
00041 #include "NIImporter_Vissim.h"
00042 #include "typeloader/NIVissimSingleTypeParser_Simdauer.h"
00043 #include "typeloader/NIVissimSingleTypeParser_Startuhrzeit.h"
00044 #include "typeloader/NIVissimSingleTypeParser_DynUml.h"
00045 #include "typeloader/NIVissimSingleTypeParser_Streckendefinition.h"
00046 #include "typeloader/NIVissimSingleTypeParser_Verbindungsdefinition.h"
00047 #include "typeloader/NIVissimSingleTypeParser_Richtungsentscheidungsdefinition.h"
00048 #include "typeloader/NIVissimSingleTypeParser_Routenentscheidungsdefinition.h"
00049 #include "typeloader/NIVissimSingleTypeParser_VWunschentscheidungsdefinition.h"
00050 #include "typeloader/NIVissimSingleTypeParser_Langsamfahrbereichdefinition.h"
00051 #include "typeloader/NIVissimSingleTypeParser_Zuflussdefinition.h"
00052 #include "typeloader/NIVissimSingleTypeParser_Fahrzeugtypdefinition.h"
00053 #include "typeloader/NIVissimSingleTypeParser_Fahrzeugklassendefinition.h"
00054 #include "typeloader/NIVissimSingleTypeParser_Verkehrszusammensetzungsdefinition.h"
00055 #include "typeloader/NIVissimSingleTypeParser_Geschwindigkeitsverteilungsdefinition.h"
00056 #include "typeloader/NIVissimSingleTypeParser_Laengenverteilungsdefinition.h"
00057 #include "typeloader/NIVissimSingleTypeParser_Zeitenverteilungsdefinition.h"
00058 #include "typeloader/NIVissimSingleTypeParser_Querverkehrsstoerungsdefinition.h"
00059 #include "typeloader/NIVissimSingleTypeParser_Lichtsignalanlagendefinition.h"
00060 #include "typeloader/NIVissimSingleTypeParser_Signalgruppendefinition.h"
00061 #include "typeloader/NIVissimSingleTypeParser_Stopschilddefinition.h"
00062 #include "typeloader/NIVissimSingleTypeParser_Knotendefinition.h"
00063 #include "typeloader/NIVissimSingleTypeParser_Signalgeberdefinition.h"
00064 #include "typeloader/NIVissimSingleTypeParser_Detektordefinition.h"
00065 #include "typeloader/NIVissimSingleTypeParser_Liniendefinition.h"
00066 #include "typeloader/NIVissimSingleTypeParser_Haltestellendefinition.h"
00067 #include "typeloader/NIVissimSingleTypeParser_Reisezeitmessungsdefinition.h"
00068 #include "typeloader/NIVissimSingleTypeParser_Querschnittsmessungsdefinition.h"
00069 #include "typeloader/NIVissimSingleTypeParser_Messungsdefinition.h"
00070 #include "typeloader/NIVissimSingleTypeParser_Verlustzeitmessungsdefinition.h"
00071 #include "typeloader/NIVissimSingleTypeParser_Stauzaehlerdefinition.h"
00072 #include "typeloader/NIVissimSingleTypeParser_Richtungspfeildefinition.h"
00073 #include "typeloader/NIVissimSingleTypeParser_Parkplatzdefinition.h"
00074 #include "typeloader/NIVissimSingleTypeParser_Fahrverhaltendefinition.h"
00075 #include "typeloader/NIVissimSingleTypeParser_Streckentypdefinition.h"
00076 #include "typeloader/NIVissimSingleTypeParser_Kennungszeile.h"
00077 #include "typeloader/NIVissimSingleTypeParser_Fensterdefinition.h"
00078 #include "typeloader/NIVissimSingleTypeParser_Auswertungsdefinition.h"
00079 #include "typeloader/NIVissimSingleTypeParser_Zusammensetzungsdefinition.h"
00080 #include "typeloader/NIVissimSingleTypeParser_Startzufallszahl.h"
00081 #include "typeloader/NIVissimSingleTypeParser_SimRate.h"
00082 #include "typeloader/NIVissimSingleTypeParser_Zeitschrittfaktor.h"
00083 #include "typeloader/NIVissimSingleTypeParser_Linksverkehr.h"
00084 #include "typeloader/NIVissimSingleTypeParser_Stauparameterdefinition.h"
00085 #include "typeloader/NIVissimSingleTypeParser_Gelbverhaltendefinition.h"
00086 #include "typeloader/NIVissimSingleTypeParser_LSAKopplungsdefinition.h"
00087 #include "typeloader/NIVissimSingleTypeParser_Gefahrwarnungsdefinition.h"
00088 #include "typeloader/NIVissimSingleTypeParser_TEAPACDefinition.h"
00089 #include "typeloader/NIVissimSingleTypeParser_Netzobjektdefinition.h"
00090 #include "typeloader/NIVissimSingleTypeParser_Fahrtverlaufdateien.h"
00091 #include "typeloader/NIVissimSingleTypeParser_Emission.h"
00092 #include "typeloader/NIVissimSingleTypeParser_Einheitendefinition.h"
00093 #include "typeloader/NIVissimSingleTypeParser__XVerteilungsdefinition.h"
00094 #include "typeloader/NIVissimSingleTypeParser__XKurvedefinition.h"
00095 #include "typeloader/NIVissimSingleTypeParser_Kantensperrung.h"
00096 #include "typeloader/NIVissimSingleTypeParser_Rautedefinition.h"
00097 
00098 
00099 #include "tempstructs/NIVissimTL.h"
00100 #include "tempstructs/NIVissimClosures.h"
00101 #include "tempstructs/NIVissimSource.h"
00102 #include "tempstructs/NIVissimTrafficDescription.h"
00103 #include "tempstructs/NIVissimVehTypeClass.h"
00104 #include "tempstructs/NIVissimConnection.h"
00105 #include "tempstructs/NIVissimDisturbance.h"
00106 #include "tempstructs/NIVissimConnectionCluster.h"
00107 #include "tempstructs/NIVissimNodeDef.h"
00108 #include "tempstructs/NIVissimEdge.h"
00109 #include "tempstructs/NIVissimDistrictConnection.h"
00110 #include "tempstructs/NIVissimVehicleType.h"
00111 
00112 #include <netbuild/NBEdgeCont.h> // !!! only for debugging purposes
00113 
00114 #ifdef CHECK_MEMORY_LEAKS
00115 #include <foreign/nvwa/debug_new.h>
00116 #endif // CHECK_MEMORY_LEAKS
00117 
00118 
00119 // ===========================================================================
00120 // method definitions
00121 // ===========================================================================
00122 // ---------------------------------------------------------------------------
00123 // static methods (interface in this case)
00124 // ---------------------------------------------------------------------------
00125 void
00126 NIImporter_Vissim::loadNetwork(const OptionsCont& oc, NBNetBuilder& nb) {
00127     if (!oc.isSet("vissim-file")) {
00128         return;
00129     }
00130     // load the visum network
00131     NIImporter_Vissim loader(nb, oc.getString("vissim-file"));
00132     loader.load(oc);
00133 }
00134 
00135 
00136 /* -------------------------------------------------------------------------
00137  * NIImporter_Vissim::VissimSingleTypeParser-methods
00138  * ----------------------------------------------------------------------- */
00139 NIImporter_Vissim::VissimSingleTypeParser::VissimSingleTypeParser(NIImporter_Vissim& parent)
00140     : myVissimParent(parent) {}
00141 
00142 
00143 NIImporter_Vissim::VissimSingleTypeParser::~VissimSingleTypeParser() {}
00144 
00145 
00146 std::string
00147 NIImporter_Vissim::VissimSingleTypeParser::myRead(std::istream& from) {
00148     std::string tmp;
00149     from >> tmp;
00150     return StringUtils::to_lower_case(tmp);
00151 }
00152 
00153 
00154 
00155 std::string
00156 NIImporter_Vissim::VissimSingleTypeParser::readEndSecure(std::istream& from,
00157         const std::string& excl) {
00158     std::string myExcl = StringUtils::to_lower_case(excl);
00159     std::string tmp = myRead(from);
00160     if (tmp == "") {
00161         return "DATAEND";
00162     }
00163     if (tmp != myExcl
00164             &&
00165             (tmp.substr(0, 2) == "--" || !myVissimParent.admitContinue(tmp))
00166        ) {
00167         return "DATAEND";
00168     }
00169     return StringUtils::to_lower_case(tmp);
00170 }
00171 
00172 
00173 std::string
00174 NIImporter_Vissim::VissimSingleTypeParser::readEndSecure(std::istream& from,
00175         const std::vector<std::string> &excl) {
00176     std::vector<std::string> myExcl;
00177     std::vector<std::string>::const_iterator i;
00178     for (i = excl.begin(); i != excl.end(); i++) {
00179         std::string mes = StringUtils::to_lower_case(*i);
00180         myExcl.push_back(mes);
00181     }
00182     std::string tmp = myRead(from);
00183     if (tmp == "") {
00184         return "DATAEND";
00185     }
00186 
00187     bool equals = false;
00188     for (i = myExcl.begin(); i != myExcl.end() && !equals; i++) {
00189         if ((*i) == tmp) {
00190             equals = true;
00191         }
00192     }
00193     if (!equals
00194             &&
00195             (tmp.substr(0, 2) == "--" || !myVissimParent.admitContinue(tmp))
00196        ) {
00197         return "DATAEND";
00198     }
00199     return StringUtils::to_lower_case(tmp);
00200 }
00201 
00202 
00203 std::string
00204 NIImporter_Vissim::VissimSingleTypeParser::overrideOptionalLabel(std::istream& from,
00205         const std::string& tag) {
00206     std::string tmp;
00207     if (tag == "") {
00208         tmp = myRead(from);
00209     } else {
00210         tmp = tag;
00211     }
00212     if (tmp == "beschriftung") {
00213         tmp = myRead(from);
00214         if (tmp == "keine") {
00215             from >> tmp;
00216         }
00217         tmp = myRead(from);
00218         tmp = myRead(from);
00219     }
00220     return tmp;
00221 }
00222 
00223 
00224 Position
00225 NIImporter_Vissim::VissimSingleTypeParser::getPosition(std::istream& from) {
00226     SUMOReal x, y;
00227     from >> x; // type-checking is missing!
00228     from >> y; // type-checking is missing!
00229     return Position(x, y);
00230 }
00231 
00232 
00233 std::vector<int>
00234 NIImporter_Vissim::VissimSingleTypeParser::parseAssignedVehicleTypes(
00235     std::istream& from, const std::string& next) {
00236     std::string tmp = readEndSecure(from);
00237     std::vector<int> ret;
00238     if (tmp == "alle") {
00239         ret.push_back(-1);
00240         return ret;
00241     }
00242     while (tmp != "DATAEND" && tmp != next) {
00243         ret.push_back(TplConvert<char>::_2int(tmp.c_str()));
00244         tmp = readEndSecure(from);
00245     }
00246     return ret;
00247 }
00248 
00249 
00250 NIVissimExtendedEdgePoint
00251 NIImporter_Vissim::VissimSingleTypeParser::readExtEdgePointDef(
00252     std::istream& from) {
00253     std::string tag;
00254     from >> tag; // "Strecke"
00255     int edgeid;
00256     from >> edgeid; // type-checking is missing!
00257     from >> tag; // "Spuren"
00258     std::vector<int> lanes;
00259     while (tag != "bei") {
00260         tag = readEndSecure(from);
00261         if (tag != "bei") {
00262             int lane = TplConvert<char>::_2int(tag.c_str());
00263             lanes.push_back(lane - 1);
00264         }
00265     }
00266     SUMOReal position;
00267     from >> position;
00268     std::vector<int> dummy;
00269     return NIVissimExtendedEdgePoint(edgeid, lanes, position, dummy);
00270 }
00271 
00272 
00273 std::string
00274 NIImporter_Vissim::VissimSingleTypeParser::readName(std::istream& from) {
00275     std::string name;
00276     from >> name;
00277     if (name[0] == '"') {
00278         while (name[name.length() - 1] != '"') {
00279             std::string tmp;
00280             from >> tmp;
00281             name = name + " " + tmp;
00282         }
00283         name = name.substr(1, name.length() - 2);
00284     }
00285     return StringUtils::convertUmlaute(name);
00286 }
00287 
00288 
00289 void
00290 NIImporter_Vissim::VissimSingleTypeParser::readUntil(std::istream& from,
00291         const std::string& name) {
00292     std::string tag;
00293     while (tag != name) {
00294         tag = myRead(from);
00295     }
00296 }
00297 
00298 bool
00299 NIImporter_Vissim::VissimSingleTypeParser::skipOverreading(std::istream& from,
00300         const std::string& name) {
00301     std::string tag;
00302     while (tag != name) {
00303         tag = myRead(from);
00304     }
00305     while (tag != "DATAEND") {
00306         tag = readEndSecure(from);
00307     }
00308     return true;
00309 }
00310 
00311 
00312 
00313 /* -------------------------------------------------------------------------
00314  * NIImporter_Vissim-methods
00315  * ----------------------------------------------------------------------- */
00316 NIImporter_Vissim::NIImporter_Vissim(NBNetBuilder& nb, const std::string& file)
00317     : myNetBuilder(nb) {
00318     UNUSED_PARAMETER(file);
00319     insertKnownElements();
00320     buildParsers();
00321     myColorMap["blau"] = RGBColor((SUMOReal) .3, (SUMOReal) 0.3, (SUMOReal) 1);
00322     myColorMap["gelb"] = RGBColor(1, 1, 0);
00323     myColorMap["grau"] = RGBColor((SUMOReal) .5, (SUMOReal) 0.5, (SUMOReal) .5);
00324     myColorMap["lila"] = RGBColor(1, 0, 1);
00325     myColorMap["gruen"] = RGBColor(0, 1, 0);
00326     myColorMap["rot"] = RGBColor(1, 0, 0);
00327     myColorMap["schwarz"] = RGBColor(0, 0, 0);
00328     myColorMap["tuerkis"] = RGBColor(0, 1, 1);
00329     myColorMap["weiss"] = RGBColor(1, 1, 1);
00330     myColorMap["keine"] = RGBColor(1, 1, 1);
00331 }
00332 
00333 
00334 
00335 
00336 NIImporter_Vissim::~NIImporter_Vissim() {
00337     NIVissimAbstractEdge::clearDict();
00338     NIVissimClosures::clearDict();
00339     NIVissimDistrictConnection::clearDict();
00340     NIVissimDisturbance::clearDict();
00341     NIVissimNodeCluster::clearDict();
00342     NIVissimNodeDef::clearDict();
00343     NIVissimSource::clearDict();
00344     NIVissimTL::clearDict();
00345     NIVissimTL::NIVissimTLSignal::clearDict();
00346     NIVissimTL::NIVissimTLSignalGroup::clearDict();
00347     NIVissimTrafficDescription::clearDict();
00348     NIVissimVehTypeClass::clearDict();
00349     NIVissimVehicleType::clearDict();
00350     NIVissimConnectionCluster::clearDict();
00351     NIVissimEdge::clearDict();
00352     NIVissimAbstractEdge::clearDict();
00353     NIVissimConnection::clearDict();
00354     for (ToParserMap::iterator i = myParsers.begin(); i != myParsers.end(); i++) {
00355         delete(*i).second;
00356     }
00357 }
00358 
00359 
00360 void
00361 NIImporter_Vissim::load(const OptionsCont& options) {
00362     // load file contents
00363     // try to open the file
00364     std::ifstream strm(options.getString("vissim-file").c_str());
00365     if (!strm.good()) {
00366         WRITE_ERROR("The vissim-file '" + options.getString("vissim-file") + "' was not found.");
00367         return;
00368     }
00369     if (!readContents(strm)) {
00370         return;
00371     }
00372     postLoadBuild(options.getFloat("vissim.join-distance"));
00373 }
00374 
00375 
00376 bool
00377 NIImporter_Vissim::admitContinue(const std::string& tag) {
00378     ToElemIDMap::const_iterator i = myKnownElements.find(tag);
00379     if (i == myKnownElements.end()) {
00380         return true;
00381     }
00382     myLastSecure = tag;
00383     return false;
00384 }
00385 
00386 
00387 bool
00388 NIImporter_Vissim::readContents(std::istream& strm) {
00389     // read contents
00390     bool ok = true;
00391     while (strm.good() && ok) {
00392         std::string tag;
00393         if (myLastSecure != "") {
00394             tag = myLastSecure;
00395         } else {
00396             strm >> tag;
00397         }
00398         myLastSecure = "";
00399         bool parsed = false;
00400         while (!parsed && strm.good() && ok) {
00401             ToElemIDMap::iterator i = myKnownElements.find(StringUtils::to_lower_case(tag));
00402             if (i != myKnownElements.end()) {
00403                 ToParserMap::iterator j = myParsers.find((*i).second);
00404                 if (j != myParsers.end()) {
00405                     VissimSingleTypeParser* parser = (*j).second;
00406                     ok = parser->parse(strm);
00407                     parsed = true;
00408                 }
00409             }
00410             if (!parsed) {
00411                 std::string line;
00412                 std::streamoff pos;
00413                 do {
00414                     pos = strm.tellg();
00415                     getline(strm, line);
00416                 } while (strm.good() && (line == "" || line[0] == ' ' || line[0] == '-'));
00417                 if (!strm.good()) {
00418                     return true;
00419                 }
00420                 strm.seekg(pos);
00421                 strm >> tag;
00422             }
00423         }
00424     }
00425     return ok;
00426 }
00427 
00428 
00429 void
00430 NIImporter_Vissim::postLoadBuild(SUMOReal offset) {
00431     // close the loading process
00432     NIVissimBoundedClusterObject::closeLoading();
00433     NIVissimConnection::dict_assignToEdges();
00434     NIVissimDisturbance::dict_SetDisturbances();
00435     // build district->connections map
00436     NIVissimDistrictConnection::dict_BuildDistrictConnections();
00437     // build clusters around nodes
00438 //    NIVissimNodeDef::buildNodeClusters();
00439     // build node clusters around traffic lights
00440 //    NIVissimTL::buildNodeClusters();
00441 
00442     // when connections or disturbances are left, build nodes around them
00443 
00444     // try to assign connection clusters to nodes
00445     //  only left connections will be processed in
00446     //   buildConnectionClusters & join
00447 //30.4. brauchen wir noch!    NIVissimNodeDef::dict_assignConnectionsToNodes();
00448 
00449     // build clusters of connections with the same direction and a similar position along the streets
00450     NIVissimEdge::buildConnectionClusters();
00451     // check whether further nodes (connection clusters by now) must be added
00452     NIVissimDistrictConnection::dict_CheckEdgeEnds();
00453 
00454     // join clusters when overlapping (different streets are possible)
00455     NIVissimEdge::dict_checkEdges2Join();
00456     NIVissimConnectionCluster::joinBySameEdges(offset);
00457 //    NIVissimConnectionCluster::joinByDisturbances(offset);
00458 
00459 //    NIVissimConnectionCluster::addTLs(offset);
00460 
00461     // build nodes from clusters
00462     NIVissimNodeCluster::setCurrentVirtID(NIVissimNodeDef::getMaxID());
00463     NIVissimConnectionCluster::buildNodeClusters();
00464 
00465 //    NIVissimNodeCluster::dict_recheckEdgeChanges();
00466 
00467     NIVissimNodeCluster::buildNBNodes(myNetBuilder.getNodeCont());
00468     NIVissimDistrictConnection::dict_BuildDistrictNodes(
00469         myNetBuilder.getDistrictCont(), myNetBuilder.getNodeCont());
00470     NIVissimEdge::dict_propagateSpeeds();
00471     NIVissimEdge::dict_buildNBEdges(myNetBuilder.getDistrictCont(),
00472                                     myNetBuilder.getNodeCont(), myNetBuilder.getEdgeCont(),
00473                                     offset);
00474     if (OptionsCont::getOptions().getBool("vissim.report-unset-speeds")) {
00475         NIVissimEdge::reportUnsetSpeeds();
00476     }
00477     NIVissimDistrictConnection::dict_BuildDistricts(myNetBuilder.getDistrictCont(),
00478             myNetBuilder.getEdgeCont(), myNetBuilder.getNodeCont());
00479     NIVissimConnection::dict_buildNBEdgeConnections(myNetBuilder.getEdgeCont());
00480     NIVissimNodeCluster::dict_addDisturbances(myNetBuilder.getDistrictCont(),
00481             myNetBuilder.getNodeCont(), myNetBuilder.getEdgeCont());
00482     NIVissimTL::dict_SetSignals(myNetBuilder.getTLLogicCont(),
00483                                 myNetBuilder.getEdgeCont());
00484 
00485 }
00486 
00487 
00488 void
00489 NIImporter_Vissim::insertKnownElements() {
00490     myKnownElements["kennung"] = VE_Kennungszeile;
00491     myKnownElements["zufallszahl"] = VE_Startzufallszahl;
00492     myKnownElements["simulationsdauer"] = VE_Simdauer;
00493     myKnownElements["startuhrzeit"] = VE_Startuhrzeit;
00494     myKnownElements["simulationsrate"] = VE_SimRate;
00495     myKnownElements["zeitschritt"] = VE_Zeitschrittfaktor;
00496     myKnownElements["linksverkehr"] = VE_Linksverkehr;
00497     myKnownElements["dynuml"] = VE_DynUml;
00498     myKnownElements["stau"] = VE_Stauparameterdefinition;
00499     myKnownElements["gelbverhalten"] = VE_Gelbverhaltendefinition;
00500     myKnownElements["strecke"] = VE_Streckendefinition;
00501     myKnownElements["verbindung"] = VE_Verbindungsdefinition;
00502     myKnownElements["richtungsentscheidung"] = VE_Richtungsentscheidungsdefinition;
00503     myKnownElements["routenentscheidung"] = VE_Routenentscheidungsdefinition;
00504     myKnownElements["vwunschentscheidung"] = VE_VWunschentscheidungsdefinition;
00505     myKnownElements["langsamfahrbereich"] = VE_Langsamfahrbereichdefinition;
00506     myKnownElements["zufluss"] = VE_Zuflussdefinition;
00507     myKnownElements["fahrzeugtyp"] = VE_Fahrzeugtypdefinition;
00508     myKnownElements["fahrzeugklasse"] = VE_Fahrzeugklassendefinition;
00509     myKnownElements["zusammensetzung"] = VE_Verkehrszusammensetzungsdefinition;
00510     myKnownElements["vwunsch"] = VE_Geschwindigkeitsverteilungsdefinition;
00511     myKnownElements["laengen"] = VE_Laengenverteilungsdefinition;
00512     myKnownElements["zeiten"] = VE_Zeitenverteilungsdefinition;
00513     myKnownElements["baujahre"] = VE_Baujahrverteilungsdefinition;
00514     myKnownElements["leistungen"] = VE_Laufleistungsverteilungsdefinition;
00515     myKnownElements["massen"] = VE_Massenverteilungsdefinition;
00516     myKnownElements["leistungen"] = VE_Leistungsverteilungsdefinition;
00517     myKnownElements["maxbeschleunigung"] = VE_Maxbeschleunigungskurvedefinition;
00518     myKnownElements["wunschbeschleunigung"] = VE_Wunschbeschleunigungskurvedefinition;
00519     myKnownElements["maxverzoegerung"] = VE_Maxverzoegerungskurvedefinition;
00520     myKnownElements["wunschverzoegerung"] = VE_Wunschverzoegerungskurvedefinition;
00521     myKnownElements["querverkehrsstoerung"] = VE_Querverkehrsstoerungsdefinition;
00522     myKnownElements["lsa"] = VE_Lichtsignalanlagendefinition;
00523     myKnownElements["signalgruppe"] = VE_Signalgruppendefinition;
00524     myKnownElements["signalgeber"] = VE_Signalgeberdefinition;
00525     myKnownElements["lsakopplung"] = VE_LSAKopplungdefinition;
00526     myKnownElements["detektor"] = VE_Detektorendefinition;
00527     myKnownElements["haltestelle"] = VE_Haltestellendefinition;
00528     myKnownElements["linie"] = VE_Liniendefinition;
00529     myKnownElements["stopschild"] = VE_Stopschilddefinition;
00530     myKnownElements["messung"] = VE_Messungsdefinition;
00531     myKnownElements["reisezeit"] = VE_Reisezeitmessungsdefinition;
00532     myKnownElements["verlustzeit"] = VE_Verlustzeitmessungsdefinition;
00533     myKnownElements["querschnittsmessung"] = VE_Querschnittsmessungsdefinition;
00534     myKnownElements["stauzaehler"] = VE_Stauzaehlerdefinition;
00535     myKnownElements["auswertung"] = VE_Auswertungsdefinition;
00536     myKnownElements["fenster"] = VE_Fensterdefinition;
00537     myKnownElements["motiv"] = VE_Gefahrenwarnsystemdefinition;
00538     myKnownElements["parkplatz"] = VE_Parkplatzdefinition;
00539     myKnownElements["knoten"] = VE_Knotendefinition;
00540     myKnownElements["teapac"] = VE_TEAPACdefinition;
00541     myKnownElements["netzobjekt"] = VE_Netzobjektdefinition;
00542     myKnownElements["richtungspfeil"] = VE_Richtungspfeildefinition;
00543     myKnownElements["raute"] = VE_Rautedefinition;
00544     myKnownElements["fahrverhalten"] = VE_Fahrverhaltendefinition;
00545     myKnownElements["fahrtverlaufdateien"] = VE_Fahrtverlaufdateien;
00546     myKnownElements["emission"] = VE_Emission;
00547     myKnownElements["einheit"] = VE_Einheitendefinition;
00548     myKnownElements["streckentyp"] = VE_Streckentypdefinition;
00549     myKnownElements["kantensperrung"] = VE_Kantensperrung;
00550     myKnownElements["kante"] = VE_Kantensperrung;
00551 
00552 
00553     myKnownElements["advance"] = VE_DUMMY;
00554     myKnownElements["temperatur"] = VE_DUMMY;
00555 
00556 }
00557 
00558 
00559 
00560 void
00561 NIImporter_Vissim::buildParsers() {
00562     myParsers[VE_Simdauer] =
00563         new NIVissimSingleTypeParser_Simdauer(*this);
00564     myParsers[VE_Startuhrzeit] =
00565         new NIVissimSingleTypeParser_Startuhrzeit(*this);
00566     myParsers[VE_DynUml] =
00567         new NIVissimSingleTypeParser_DynUml(*this);
00568     myParsers[VE_Streckendefinition] =
00569         new NIVissimSingleTypeParser_Streckendefinition(*this);
00570     myParsers[VE_Verbindungsdefinition] =
00571         new NIVissimSingleTypeParser_Verbindungsdefinition(*this);
00572     myParsers[VE_Richtungsentscheidungsdefinition] =
00573         new NIVissimSingleTypeParser_Richtungsentscheidungsdefinition(*this);
00574     myParsers[VE_Routenentscheidungsdefinition] =
00575         new NIVissimSingleTypeParser_Routenentscheidungsdefinition(*this);
00576     myParsers[VE_VWunschentscheidungsdefinition] =
00577         new NIVissimSingleTypeParser_VWunschentscheidungsdefinition(*this);
00578     myParsers[VE_Langsamfahrbereichdefinition] =
00579         new NIVissimSingleTypeParser_Langsamfahrbereichdefinition(*this);
00580     myParsers[VE_Zuflussdefinition] =
00581         new NIVissimSingleTypeParser_Zuflussdefinition(*this);
00582     myParsers[VE_Fahrzeugtypdefinition] =
00583         new NIVissimSingleTypeParser_Fahrzeugtypdefinition(*this, myColorMap);
00584     myParsers[VE_Fahrzeugklassendefinition] =
00585         new NIVissimSingleTypeParser_Fahrzeugklassendefinition(*this, myColorMap);
00586     myParsers[VE_Geschwindigkeitsverteilungsdefinition] =
00587         new NIVissimSingleTypeParser_Geschwindigkeitsverteilungsdefinition(*this);
00588     myParsers[VE_Laengenverteilungsdefinition] =
00589         new NIVissimSingleTypeParser_Laengenverteilungsdefinition(*this);
00590     myParsers[VE_Zeitenverteilungsdefinition] =
00591         new NIVissimSingleTypeParser_Zeitenverteilungsdefinition(*this);
00592     myParsers[VE_Querverkehrsstoerungsdefinition] =
00593         new NIVissimSingleTypeParser_Querverkehrsstoerungsdefinition(*this);
00594     myParsers[VE_Lichtsignalanlagendefinition] =
00595         new NIVissimSingleTypeParser_Lichtsignalanlagendefinition(*this);
00596     myParsers[VE_Signalgruppendefinition] =
00597         new NIVissimSingleTypeParser_Signalgruppendefinition(*this);
00598     myParsers[VE_Stopschilddefinition] =
00599         new NIVissimSingleTypeParser_Stopschilddefinition(*this);
00600     myParsers[VE_Knotendefinition] =
00601         new NIVissimSingleTypeParser_Knotendefinition(*this);
00602     myParsers[VE_Signalgeberdefinition] =
00603         new NIVissimSingleTypeParser_Signalgeberdefinition(*this);
00604     myParsers[VE_Detektorendefinition] =
00605         new NIVissimSingleTypeParser_Detektordefinition(*this);
00606     myParsers[VE_Haltestellendefinition] =
00607         new NIVissimSingleTypeParser_Haltestellendefinition(*this);
00608     myParsers[VE_Liniendefinition] =
00609         new NIVissimSingleTypeParser_Liniendefinition(*this);
00610     myParsers[VE_Reisezeitmessungsdefinition] =
00611         new NIVissimSingleTypeParser_Reisezeitmessungsdefinition(*this);
00612     myParsers[VE_Querschnittsmessungsdefinition] =
00613         new NIVissimSingleTypeParser_Querschnittsmessungsdefinition(*this);
00614     myParsers[VE_Messungsdefinition] =
00615         new NIVissimSingleTypeParser_Messungsdefinition(*this);
00616     myParsers[VE_Verlustzeitmessungsdefinition] =
00617         new NIVissimSingleTypeParser_Verlustzeitmessungsdefinition(*this);
00618     myParsers[VE_Stauzaehlerdefinition] =
00619         new NIVissimSingleTypeParser_Stauzaehlerdefinition(*this);
00620     myParsers[VE_Rautedefinition] =
00621         new NIVissimSingleTypeParser_Rautedefinition(*this);
00622     myParsers[VE_Richtungspfeildefinition] =
00623         new NIVissimSingleTypeParser_Richtungspfeildefinition(*this);
00624     myParsers[VE_Parkplatzdefinition] =
00625         new NIVissimSingleTypeParser_Parkplatzdefinition(*this);
00626     myParsers[VE_Fahrverhaltendefinition] =
00627         new NIVissimSingleTypeParser_Fahrverhaltendefinition(*this);
00628     myParsers[VE_Streckentypdefinition] =
00629         new NIVissimSingleTypeParser_Streckentypdefinition(*this);
00630     myParsers[VE_Kennungszeile] =
00631         new NIVissimSingleTypeParser_Kennungszeile(*this);
00632     myParsers[VE_Fensterdefinition] =
00633         new NIVissimSingleTypeParser_Fensterdefinition(*this);
00634     myParsers[VE_Auswertungsdefinition] =
00635         new NIVissimSingleTypeParser_Auswertungsdefinition(*this);
00636     myParsers[VE_Verkehrszusammensetzungsdefinition] =
00637         new NIVissimSingleTypeParser_Zusammensetzungsdefinition(*this);
00638     myParsers[VE_Kantensperrung] =
00639         new NIVissimSingleTypeParser_Kantensperrung(*this);
00640 
00641     myParsers[VE_Startzufallszahl] =
00642         new NIVissimSingleTypeParser_Startzufallszahl(*this);
00643     myParsers[VE_SimRate] =
00644         new NIVissimSingleTypeParser_SimRate(*this);
00645     myParsers[VE_Zeitschrittfaktor] =
00646         new NIVissimSingleTypeParser_Zeitschrittfaktor(*this);
00647     myParsers[VE_Linksverkehr] =
00648         new NIVissimSingleTypeParser_Linksverkehr(*this);
00649     myParsers[VE_Stauparameterdefinition] =
00650         new NIVissimSingleTypeParser_Stauparameterdefinition(*this);
00651     myParsers[VE_Gelbverhaltendefinition] =
00652         new NIVissimSingleTypeParser_Gelbverhaltendefinition(*this);
00653     myParsers[VE_LSAKopplungdefinition] =
00654         new NIVissimSingleTypeParser_LSAKopplungsdefinition(*this);
00655     myParsers[VE_Gefahrenwarnsystemdefinition] =
00656         new NIVissimSingleTypeParser_Gefahrwarnungsdefinition(*this);
00657     myParsers[VE_TEAPACdefinition] =
00658         new NIVissimSingleTypeParser_TEAPACDefinition(*this);
00659     myParsers[VE_Netzobjektdefinition] =
00660         new NIVissimSingleTypeParser_Netzobjektdefinition(*this);
00661     myParsers[VE_Fahrtverlaufdateien] =
00662         new NIVissimSingleTypeParser_Fahrtverlaufdateien(*this);
00663     myParsers[VE_Emission] =
00664         new NIVissimSingleTypeParser_Emission(*this);
00665     myParsers[VE_Einheitendefinition] =
00666         new NIVissimSingleTypeParser_Einheitendefinition(*this);
00667     myParsers[VE_Baujahrverteilungsdefinition] =
00668         new NIVissimSingleTypeParser__XVerteilungsdefinition(*this);
00669     myParsers[VE_Laufleistungsverteilungsdefinition] =
00670         new NIVissimSingleTypeParser__XVerteilungsdefinition(*this);
00671     myParsers[VE_Massenverteilungsdefinition] =
00672         new NIVissimSingleTypeParser__XVerteilungsdefinition(*this);
00673     myParsers[VE_Leistungsverteilungsdefinition] =
00674         new NIVissimSingleTypeParser__XVerteilungsdefinition(*this);
00675     myParsers[VE_Maxbeschleunigungskurvedefinition] =
00676         new NIVissimSingleTypeParser__XKurvedefinition(*this);
00677     myParsers[VE_Wunschbeschleunigungskurvedefinition] =
00678         new NIVissimSingleTypeParser__XKurvedefinition(*this);
00679     myParsers[VE_Maxverzoegerungskurvedefinition] =
00680         new NIVissimSingleTypeParser__XKurvedefinition(*this);
00681     myParsers[VE_Wunschverzoegerungskurvedefinition] =
00682         new NIVissimSingleTypeParser__XKurvedefinition(*this);
00683 
00684 }
00685 
00686 
00687 
00688 /****************************************************************************/
00689 
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Friends Defines