40 {
"VSYS", VISUM_SYS },
41 {
"STRECKENTYP", VISUM_LINKTYPE },
42 {
"KNOTEN", VISUM_NODE },
43 {
"BEZIRK", VISUM_DISTRICT },
44 {
"PUNKT", VISUM_POINT },
45 {
"STRECKE", VISUM_LINK },
47 {
"VSYSSET", VISUM_TYPES },
48 {
"RANG", VISUM_RANK },
49 {
"KAPIV", VISUM_CAPACITY },
50 {
"XKOORD", VISUM_XCOORD },
51 {
"YKOORD", VISUM_YCOORD },
53 {
"CODE", VISUM_CODE },
54 {
"VONKNOTNR", VISUM_FROMNODE },
55 {
"NACHKNOTNR", VISUM_TONODE },
56 {
"TYPNR", VISUM_TYPE },
58 {
"ANBINDUNG", VISUM_DISTRICT_CONNECTION },
59 {
"BEZNR", VISUM_SOURCE_DISTRICT },
60 {
"KNOTNR", VISUM_FROMNODENO },
61 {
"RICHTUNG", VISUM_DIRECTION },
62 {
"FLAECHEID", VISUM_SURFACEID },
63 {
"TFLAECHEID", VISUM_FACEID },
64 {
"VONPUNKTID", VISUM_FROMPOINTID },
65 {
"NACHPUNKTID", VISUM_TOPOINTID },
66 {
"KANTE", VISUM_EDGE },
67 {
"ABBIEGER", VISUM_TURN },
68 {
"UEBERKNOTNR", VISUM_VIANODENO },
69 {
"ANZFAHRSTREIFEN", VISUM_NUMLANES },
70 {
"INDEX", VISUM_INDEX },
71 {
"STRECKENPOLY", VISUM_LINKPOLY },
72 {
"FLAECHENELEMENT", VISUM_SURFACEITEM },
73 {
"TEILFLAECHENELEMENT", VISUM_FACEITEM },
74 {
"KANTEID", VISUM_EDGEID },
75 {
"Q", VISUM_ORIGIN },
76 {
"Z", VISUM_DESTINATION },
77 {
"HALTEPUNKT", VISUM_STOPPOINT },
78 {
"NAME", VISUM_NAME },
79 {
"STRNR", VISUM_LINKNO },
80 {
"RELPOS", VISUM_RELPOS },
81 {
"KATNR", VISUM_CATID },
82 {
"ZWISCHENPUNKT", VISUM_EDGEITEM },
83 {
"POIKATEGORIE", VISUM_POICATEGORY },
100 if (!oc.
isSet(
"visum-file")) {
106 oc.
getBool(
"visum.use-type-priority"),
117 const std::string& file,
120 const std::string& languageFile) :
121 myNetBuilder(nb), myFileName(file),
122 myCapacity2Lanes(capacity2Lanes), myUseVisumPrio(useVisumPrio) {
123 if (languageFile !=
"") {
185 for (NIVisumTL_Map::iterator j =
myTLS.begin(); j !=
myTLS.end(); j++) {
210 if (line.length() > 0 && line[0] ==
'$') {
211 ParserVector::iterator i;
213 std::string dataName =
"$" + (*i).name +
":";
214 if (line.substr(0, dataName.length()) == dataName) {
216 (*i).pattern = line.substr(dataName.length());
224 if ((*i).position < 0) {
236 bool singleDataEndFound =
false;
239 if (line.length() == 0 || line[0] ==
'*' || line[0] ==
'$') {
240 singleDataEndFound =
true;
245 (this->*(*i).function)();
247 WRITE_ERRORF(
TL(
"Too short value line in % occurred."), (*i).name);
251 WRITE_ERRORF(
TL(
"One of the needed values ('%') is missing in %."), std::string(e.what()), (*i).name);
261 for (NIVisumTL_Map::iterator j =
myTLS.begin(); j !=
myTLS.end(); j++) {
266 (*k).first->addShape((*k).second);
291 }
else if (speed < 0) {
355 long long int flaecheID;
401 if (speedS.find(
"km/h") != std::string::npos) {
402 speedS = speedS.substr(0, speedS.find(
"km/h"));
434 bool oneway_checked = oneway;
436 if (previous !=
nullptr) {
439 oneway_checked =
false;
442 oneway_checked =
false;
447 if (previous !=
nullptr) {
450 oneway_checked =
false;
456 if (nolanes != 0 && speed != 0) {
473 if (nolanes != 0 && speed != 0) {
492 myEdges[id] = std::make_pair(from, to);
513 if (dest ==
nullptr) {
523 if (dir.length() == 0) {
548 if (dest ==
nullptr) {
568 std::string
id = bez +
"-" + dest->
getID();
571 if (dir.length() == 0) {
577 bool hasContinuation =
false;
578 for (EdgeVector::const_iterator i = edges.begin(); i != edges.end(); ++i) {
579 if (!(*i)->isMacroscopicConnector()) {
580 hasContinuation =
true;
583 if (!hasContinuation) {
585 WRITE_WARNINGF(
TL(
"Incoming connector '%' will not be build - would be not connected to network."),
id);
588 if (src ==
nullptr) {
592 NBEdge* edge =
new NBEdge(
id, src, dest,
"VisumConnector",
603 if (edge !=
nullptr) {
611 bool hasPredeccessor =
false;
612 for (EdgeVector::const_iterator i = edges.begin(); i != edges.end(); ++i) {
613 if (!(*i)->isMacroscopicConnector()) {
614 hasPredeccessor =
true;
617 if (!hasPredeccessor) {
619 WRITE_WARNINGF(
TL(
"Outgoing connector '%' will not be build - would be not connected to network."),
id);
622 if (src ==
nullptr) {
627 NBEdge* edge =
new NBEdge(
id, dest, src,
"VisumConnector",
638 if (edge !=
nullptr) {
656 if (from ==
nullptr || via ==
nullptr || to ==
nullptr) {
668 if (src ==
nullptr) {
674 if (dest ==
nullptr) {
739 if (baseEdge ==
nullptr) {
745 if (node ==
nullptr) {
751 if (edge ==
nullptr) {
786 WRITE_ERRORF(
TL(
"A lane length for edge '%' is not numeric (%)."), edge->
getID(), lengthS);
790 WRITE_ERRORF(
TL(
"A lane length for edge '%' is not positive (%)."), edge->
getID(), lengthS);
820 bool mustRecheck =
true;
821 double seenLength = 0;
822 while (mustRecheck) {
825 std::string sub = edge->
getID();
826 sub = sub.substr(sub.rfind(
'_', sub.rfind(
'_') - 1));
827 sub = sub.substr(1, sub.find(
'_', 1) - 1);
848 double useLength = length - seenLength;
849 useLength = edge->
getLength() - useLength;
850 if (useLength < 0 || useLength > edge->
getLength()) {
854 std::string edgeID = edge->
getID();
857 edgeID = edgeID.substr(0, edgeID.find(
'_'));
863 std::string nid = edgeID +
"_" +
toString((
int) length) +
"_" + node->
getID();
903 auto tlIt =
myTLS.find(trafficLight);
904 if (n !=
nullptr && tlIt !=
myTLS.end()) {
905 tlIt->second->addNode(n);
907 WRITE_ERROR(
"Could not assign" + std::string(n ==
nullptr ?
" missing" :
"") +
" node '" + node
908 +
"' to" + std::string(tlIt ==
myTLS.end() ?
" missing" :
"") +
" traffic light '" + trafficLight +
"'");
922 WRITE_ERRORF(
TL(
"Could not find TLS '%' for setting the signal group."), LSAid);
925 myTLS.find(LSAid)->second->addSignalGroup(
myCurrentID, startTime, endTime, yellowTime);
935 WRITE_WARNING(
TL(
"Ignoring SIGNALGRUPPEZUFSABBIEGER because LsaNr is not known"));
948 if (from ==
nullptr && to ==
nullptr) {
957 if (edg1 !=
nullptr && edg2 !=
nullptr) {
960 if (edg1->
getID()[0] ==
'-') {
961 sid = edg1->
getID().substr(1);
963 sid =
"-" + edg1->
getID();
965 if (sid.find(
'_') != std::string::npos) {
966 sid = sid.substr(0, sid.find(
'_'));
972 if (edg2->
getID()[0] ==
'-') {
973 sid = edg2->
getID().substr(1);
975 sid =
"-" + edg2->
getID();
977 if (sid.find(
'_') != std::string::npos) {
978 sid = sid.substr(0, sid.find(
'_'));
1008 if (dir.length() > 0 && dir[0] ==
'1') {
1016 const std::vector<long long int>& areas =
mySubPartsAreas.find(
id)->second;
1017 for (std::vector<long long int>::const_iterator i = areas.begin(); i != areas.end(); ++i) {
1025 if (dir.length() > 0 && dir[0] ==
'1') {
1044 myTLS.find(LSAid)->second->addPhase(phaseid, startTime, endTime, yellowTime);
1057 SG.
phases()[Phaseid] = PH;
1063 NBEdge* fromEdge =
nullptr;
1064 NBEdge* toEdge =
nullptr;
1067 if (nodeID ==
"0") {
1070 if (fromEdge ==
nullptr) {
1074 WRITE_WARNING(
TL(
"Ignoring lane-to-lane connection (not yet implemented for this format version)"));
1078 if (node ==
nullptr) {
1084 if (fromEdge ==
nullptr || toEdge ==
nullptr) {
1088 int fromLaneOffset = 0;
1098 int toLaneOffset = 0;
1112 WRITE_ERRORF(
TL(
"A from-lane number for edge '%' is not numeric (%)."), fromEdge->
getID(), fromLaneS);
1117 WRITE_ERRORF(
TL(
"A from-lane number for edge '%' is not positive (%)."), fromEdge->
getID(), fromLaneS);
1126 WRITE_ERRORF(
TL(
"A to-lane number for edge '%' is not numeric (%)."), toEdge->
getID(), toLaneS);
1131 WRITE_ERRORF(
TL(
"A to-lane number for edge '%' is not positive (%)."), toEdge->
getID(), toLaneS);
1135 if (fromLane - fromLaneOffset < 0) {
1138 fromLane = (int)fromEdge->
getNumLanes() - (fromLane - fromLaneOffset) - 1;
1140 if (toLane - toLaneOffset < 0) {
1143 toLane = (int)toEdge->
getNumLanes() - (toLane - toLaneOffset) - 1;
1147 WRITE_ERRORF(
TL(
"A from-lane number for edge '%' is larger than the edge's lane number (%)."), fromEdge->
getID(), fromLaneS);
1151 WRITE_ERRORF(
TL(
"A to-lane number for edge '%' is larger than the edge's lane number (%)."), toEdge->
getID(), toLaneS);
1168 }
else if (from ==
nullptr && to ==
nullptr) {
1169 WRITE_WARNINGF(
TL(
"Ignoring stopping place '%' without node information"),
id);
1172 if (edge ==
nullptr) {
1173 WRITE_WARNINGF(
TL(
"Ignoring stopping place '%' with invalid edge reference '%'"),
id, edgeID);
1175 }
else if (from !=
nullptr) {
1178 if (edge2 ==
nullptr) {
1179 WRITE_WARNINGF(
TL(
"Could not find edge with from-node '%' and base id '%' for stopping place '%'"), from->
getID(), edge->
getID(),
id);
1189 if (edge2 ==
nullptr) {
1190 WRITE_WARNINGF(
TL(
"Could not find edge with to-node '%' and base id '%' for stopping place '%'"), to->
getID(), edge->
getID(),
id);
1203 std::shared_ptr<NBPTStop> ptStop = std::make_shared<NBPTStop>(
id, pos, edge->
getID(), edge->
getID(), length, name, permissions);
1213 if (val.find(suffix) != std::string::npos) {
1214 val = val.substr(0, val.find(suffix));
1250 if (v ==
"bus" || v ==
"tcsp" || v ==
"acces tc" || v ==
"Accès tc" || v ==
"accès tc") {
1252 }
else if (v ==
"walk" || v ==
"w" || v ==
"f" || v ==
"ped" || v ==
"map") {
1254 }
else if (v ==
"l" || v ==
"lkw" || v ==
"h" || v ==
"hgv" || v ==
"lw" || v ==
"truck" || v ==
"tru" || v ==
"pl") {
1256 }
else if (v ==
"b" || v ==
"bike" || v ==
"velo") {
1258 }
else if (v ==
"train" || v ==
"rail") {
1260 }
else if (v ==
"tram") {
1262 }
else if (v ==
"p" || v ==
"pkw" || v ==
"car" || v ==
"c" || v ==
"vp" || v ==
"2rm") {
1278 if (node ==
nullptr) {
1288 if (node ==
nullptr) {
1309 if (edge ==
nullptr) {
1330 if (edge->
getID()[0] ==
'-') {
1331 sid = edge->
getID().substr(1);
1333 sid =
"-" + edge->
getID();
1335 if (sid.find(
'_') != std::string::npos) {
1336 sid = sid.substr(0, sid.find(
'_'));
1344 if (begin ==
nullptr) {
1348 std::string edgeID = ret->
getID();
1350 while (ret !=
nullptr) {
1356 if (nedges.size() != 1) {
1361 NBEdge* next = nedges[0];
1362 if (ret->
getID().substr(0, edgeID.length()) != next->
getID().substr(0, edgeID.length())) {
1376 while (ret !=
nullptr) {
1382 if (nedges.size() != 1) {
1387 NBEdge* next = nedges[0];
1388 if (ret->
getID().substr(0, edgeID.length()) != next->
getID().substr(0, edgeID.length())) {
1407 if (edge ==
nullptr) {
1427 EdgeVector::const_iterator i;
1429 if (ToNode == (*i)->getToNode()) {
1442 value = value.substr(0, value.length() - 4);
1453 return defaultValue;
1470 double defaultValue) {
1487 const std::string& fieldName2) {
1505 if (dist ==
nullptr) {
1510 nid =
id +
"-" + dest->
getID();
1525 if (from ==
nullptr) {
1526 WRITE_ERROR(
TL(
" The from-node was not found within the net"));
1528 if (to ==
nullptr) {
1529 WRITE_ERROR(
TL(
" The to-node was not found within the net"));
1534 return from !=
nullptr && to !=
nullptr && from != to;
1539 return (edge->
getID().length() > node->
getID().length() + 1
1540 && (edge->
getID().substr(edge->
getID().length() - node->
getID().length() - 1) ==
"_" + node->
getID()));
1545 std::ifstream strm(file.c_str());
1547 throw ProcessError(
TLF(
"Could not load VISUM language map from '%'.", file));
1549 while (strm.good()) {
1558 }
else if (keyDE !=
"") {
#define WRITE_WARNINGF(...)
#define WRITE_ERRORF(...)
#define WRITE_MESSAGE(msg)
#define WRITE_WARNING(msg)
#define PROGRESS_DONE_MESSAGE()
#define PROGRESS_BEGIN_MESSAGE(msg)
std::vector< NBEdge * > EdgeVector
container for (sorted) edges
long long int SVCPermissions
bitset where each bit declares whether a certain SVC may use this edge/lane
@ SVC_TRUCK
vehicle is a large transport vehicle
@ SVC_RAIL
vehicle is a not electrified rail
@ SVC_PASSENGER
vehicle is a passenger car (a "normal" car)
@ SVC_BICYCLE
vehicle is a bicycle
@ SVC_TRAM
vehicle is a light rail
@ SVC_BUS
vehicle is a bus
@ SVC_PEDESTRIAN
pedestrian
LaneSpreadFunction
Numbers representing special SUMO-XML-attribute values Information how the edge's lateral offset shal...
@ SUMO_ATTR_SPREADTYPE
The information about how to spread the lanes from the given position.
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
void setPos(unsigned long pos)
Sets the current position within the file to the given value.
unsigned long getPosition()
Returns the current position within the file.
bool readLine(LineHandler &lh)
Reads a single (the next) line from the file and reports it to the given LineHandler.
bool setFile(const std::string &file)
Reinitialises the reader for reading from the given file.
void reinit()
Reinitialises the reading (of the previous file)
bool hasMore() const
Returns whether another line may be read (the file was not read completely)
A helper class which computes the lane number from given capacity.
int get(double capacity) const
Returns the number of lanes computed from the given capacity.
NBDistrict * retrieve(const std::string &id) const
Returns the districts with the given id.
bool addSink(const std::string &dist, NBEdge *const destination, double weight)
Adds a sink to the named district.
bool insert(NBDistrict *const district)
Adds a district to the dictionary.
bool addSource(const std::string &dist, NBEdge *const source, double weight)
Adds a source to the named district.
A class representing a single district.
const Position & getPosition() const
Returns the position of this district's center.
NBEdge * retrieve(const std::string &id, bool retrieveExtracted=false) const
Returns the edge that has the given id.
void reduceGeometries(const double minDist)
bool insert(NBEdge *edge, bool ignorePrunning=false)
Adds an edge to the dictionary.
bool splitAt(NBDistrictCont &dc, NBEdge *edge, NBNode *node)
Splits the edge at the position nearest to the given node.
The representation of a single edge during network building.
void addGeometryPoint(int index, const Position &p)
Adds a further geometry point.
double getLength() const
Returns the computed length of the edge.
void setPermissions(SVCPermissions permissions, int lane=-1)
set allowed/disallowed classes for the given lane or for all lanes if -1 is given
NBNode * getToNode() const
Returns the destination node of the edge.
static const double UNSPECIFIED_FRICTION
unspecified lane friction
void incLaneNo(int by)
increment lane
const PositionVector & getGeometry() const
Returns the geometry of the edge.
bool addEdge2EdgeConnection(NBEdge *dest, bool overrideRemoval=false, SVCPermissions permission=SVC_UNSPECIFIED)
Adds a connection to another edge.
bool addLane2LaneConnection(int fromLane, NBEdge *dest, int toLane, Lane2LaneInfoType type, bool mayUseSameDestination=false, bool mayDefinitelyPass=false, KeepClear keepClear=KEEPCLEAR_UNSPECIFIED, double contPos=UNSPECIFIED_CONTPOS, double visibility=UNSPECIFIED_VISIBILITY_DISTANCE, double speed=UNSPECIFIED_SPEED, double friction=UNSPECIFIED_FRICTION, double length=myDefaultConnectionLength, const PositionVector &customShape=PositionVector::EMPTY, const bool uncontrolled=UNSPECIFIED_CONNECTION_UNCONTROLLED, SVCPermissions permissions=SVC_UNSPECIFIED, const bool indirectLeft=false, const std::string &edgeType="", SVCPermissions changeLeft=SVC_UNSPECIFIED, SVCPermissions changeRight=SVC_UNSPECIFIED, bool postProcess=false)
Adds a connection between the specified this edge's lane and an approached one.
const std::string & getID() const
void setLaneSpreadFunction(LaneSpreadFunction spread)
(Re)sets how the lanes lateral offset shall be computed
int getNumLanes() const
Returns the number of lanes.
@ VALIDATED
The connection was computed and validated.
NBNode * getFromNode() const
Returns the origin node of the edge.
static const double UNSPECIFIED_WIDTH
unspecified lane width
static const double UNSPECIFIED_OFFSET
unspecified lane offset
void setAsMacroscopicConnector()
static std::string normalIDRepresentation(const std::string &id)
converts the numerical id to its "normal" string representation
Instance responsible for building networks.
NBPTStopCont & getPTStopCont()
Returns a reference to the pt stop container.
NBNodeCont & getNodeCont()
Returns a reference to the node container.
NBEdgeCont & getEdgeCont()
NBDistrictCont & getDistrictCont()
Returns a reference the districts container.
NBTypeCont & getTypeCont()
Returns a reference to the type container.
NBTrafficLightLogicCont & getTLLogicCont()
Returns a reference to the traffic light logics container.
static bool transformCoordinate(Position &from, bool includeInBoundary=true, GeoConvHelper *from_srs=nullptr)
transforms loaded coordinates handles projections, offsets (using GeoConvHelper) and import of height...
bool insert(const std::string &id, const Position &position, NBDistrict *district=0)
Inserts a node into the map.
NBNode * retrieve(const std::string &id) const
Returns the node with the given name.
Represents a single node (junction) during network building.
bool hasIncoming(const NBEdge *const e) const
Returns whether the given edge ends at this node.
const EdgeVector & getIncomingEdges() const
Returns this node's incoming edges (The edges which yield in this node)
const EdgeVector & getOutgoingEdges() const
Returns this node's outgoing edges (The edges which start at this node)
bool hasOutgoing(const NBEdge *const e) const
Returns whether the given edge starts at this node.
NBEdge * getConnectionTo(NBNode *n) const
get connection to certain node
bool insert(std::shared_ptr< NBPTStop > ptStop, bool floating=false)
Inserts a node into the map.
bool markEdgeTypeAsSet(const std::string &id, const SumoXMLAttr attr)
Marks an attribute of a edgeType as set.
void insertEdgeType(const std::string &id, int numLanes, double maxSpeed, int prio, SVCPermissions permissions, LaneSpreadFunction spreadType, double width, bool oneWayIsDefault, double sidewalkWidth, double bikeLaneWidth, double widthResolution, double maxWidth, double minWidth)
Adds a edgeType into the list.
double getEdgeTypeSpeed(const std::string &edgeType) const
Returns the maximal velocity for the given edgeType [m/s].
int getEdgeTypePriority(const std::string &edgeType) const
Returns the priority for the given edgeType.
int getEdgeTypeNumLanes(const std::string &edgeType) const
Returns the number of lanes for the given edgeType.
SVCPermissions getEdgeTypePermissions(const std::string &edgeType) const
Returns allowed vehicle classes for the given edgeType.
A VISUM network importer.
void load()
Parses the VISUM-network file storing the parsed structures within myNetBuilder.
void parse_Phases()
Parses LSAPHASE/PHASE.
NBCapacity2Lanes myCapacity2Lanes
The converter to compute the lane number of edges from their capacity.
static StringBijection< VISUM_KEY > KEYS
link directions
NBNetBuilder & myNetBuilder
The network builder to fill with loaded values.
void parse_Edges()
Parses STRECKE/STRECKEN.
double getWeightedFloat2(const std::string &name, const std::string &name2, const std::string &suffix)
as above but with two alternative names
~NIImporter_VISUM()
destructor
std::vector< std::string > myTouchedEdges
Already read edges.
NBEdge * getNamedEdge(const std::string &fieldName)
Tries to get the edge which name is stored in the given field.
double getWeightedFloat(const std::string &name, const std::string &suffix)
tries to get a double which is possibly assigned to a certain modality
void parse_VSysTypes()
Parses VSYS.
SVCPermissions getPermissions(const std::string &name, bool warn=false, SVCPermissions unknown=SVCAll)
parse permissions
void parse_NodesToTrafficLights()
Parses KNOTENZULSA/SIGNALANLAGEZUKNOTEN.
void parse_PartOfArea()
Parses FLAECHENELEMENT.
void parse_TrafficLights()
Parses LSA/SIGNALANLAGE.
void parse_Connectors_legacy()
NBNode * getNamedNodeSecure(const std::string &fieldName, NBNode *fallback=0)
void parse_Point()
Parses PUNKT.
void parse_Districts()
Parses BEZIRK.
VSysTypeNames myVSysTypes
The used vsystypes.
std::string myCurrentID
The name of the currently parsed item used for error reporting.
bool getWeightedBool(const std::string &name)
tries to get a bool which is possibly assigned to a certain modality
void parse_stopPoints()
Parses HALTEPUNKT (public transport stop locations)
std::map< NBDistrict *, PositionVector > myDistrictShapes
A temporary storage for district shapes as they are filled incrementally.
std::string myFileName
The name of the parsed file, for error reporting.
std::map< long long int, Position > myPoints
A map of point ids to positions.
void addParser(const std::string &name, ParsingFunction function)
Adds a parser into the sorted list of parsers to use.
static void loadNetwork(const OptionsCont &oc, NBNetBuilder &nb)
Loads network definition from the assigned option and stores it in the given network builder.
NIImporter_VISUM(NBNetBuilder &nb, const std::string &file, NBCapacity2Lanes capacity2Lanes, bool useVisumPrio, const std::string &languageFile)
constructor
static StringBijection< VISUM_KEY >::Entry KEYS_DE[]
Strings for the keywords.
std::map< long long int, std::pair< long long int, long long int > > myEdges
A map of edge (not road, but "edge" in this case) ids to from/to-points.
void parse_EdgePolys()
Parses STRECKENPOLY.
LineReader myLineReader
The line reader to use to read from the file.
bool myUseVisumPrio
Information whether VISUM priority information shall be used.
void loadLanguage(const std::string &file)
bool checkNodes(NBNode *from, NBNode *to)
Returns whether both nodes are a valid combination of from/to-nodes.
NBEdge * getReversedContinuating(NBEdge *edge, NBNode *node)
Returns the opposite direction of the given edge.
ParserVector mySingleDataParsers
List of known parsers.
void parse_SignalGroupsToPhases()
Parses LSASIGNALGRUPPEZULSAPHASE.
NBNode * getNamedNode(const std::string &fieldName)
Tries to get the node which name is stored in the given field.
void parse_Kante()
Parses FLAECHENELEMENT.
void parse_SignalGroups()
Parses LSASIGNALGRUPPE/SIGNALGRUPPE.
NBNode * buildDistrictNode(const std::string &id, NBNode *dest, bool isSource)
Builds a node for the given district and returns it.
void parse_Lanes()
Parses FAHRSTREIFEN.
NBEdge * getEdge(NBNode *FromNode, NBNode *ToNode)
Returns the edge that connects both nodes.
NamedColumnsParser myLineParser
the parser to parse the information from the data lines
double getNamedFloat(const std::string &fieldName)
Returns the value from the named column as a float.
std::map< long long int, NBDistrict * > myShapeDistrictMap
A map from district shape definition name to the district.
void parse_Turns()
Parses ABBIEGEBEZIEHUNG/ABBIEGER.
void parse_Nodes()
Parses KNOTEN.
void parse_TurnsToSignalGroups()
Parses ABBZULSASIGNALGRUPPE/SIGNALGRUPPEZUABBIEGER.
NBEdge * getNamedEdgeContinuating(const std::string &fieldName, NBNode *node)
Tries to get the edge which name is stored in the given field continuating the search for a subedge t...
std::string getNamedString(const std::string &fieldName)
Returns the value from the named column as a normalised string.
void parse_LanesConnections()
Parses FAHRSTREIFENABBIEGER.
static bool isSplitEdge(NBEdge *edge, NBNode *node)
whether the edge id ends with _nodeID
void parse_Types()
Parses STRECKENTYP.
void parse_Connectors()
Parses ANBINDUNG.
void parse_AreaSubPartElement()
Parses ABBZULSASIGNALGRUPPE/SIGNALGRUPPEZUABBIEGER.
@ VISUM_DISTRICT_CONNECTION
std::map< long long int, std::vector< long long int > > mySubPartsAreas
A map from area parts to area ids.
NIVisumTL_Map myTLS
List of visum traffic lights.
A signal group can be defined either by a time period or by phases.
std::map< std::string, Phase * > & phases()
Returns the phases map.
NBConnectionVector & connections()
Returns the connections vector.
Intermediate class for storing visum traffic lights during their import.
std::map< std::string, Phase * > & getPhases()
Returns the map of named phases.
SignalGroup & getSignalGroup(const std::string &name)
Returns the named signal group.
void reinit(const std::string &def, const std::string &defDelim=";", const std::string &lineDelim=";", bool chomp=false, bool ignoreCase=true)
Reinitialises the parser.
bool know(const std::string &name) const
Returns the information whether the named column is known.
void parseLine(const std::string &line)
Parses the contents of the line.
std::string get(const std::string &name, bool prune=false) const
Returns the named information.
const std::string & getID() const
Returns the id.
A storage for options typed value containers)
bool isSet(const std::string &name, bool failOnNonExistant=true) const
Returns the information whether the named option is set.
double getFloat(const std::string &name) const
Returns the double-value of the named option (only for Option_Float)
std::string getString(const std::string &name) const
Returns the string-value of the named option (only for Option_String)
bool getBool(const std::string &name) const
Returns the boolean-value of the named option (only for Option_Bool)
static OptionsCont & getOptions()
Retrieves the options.
A point in 2D or 3D with translation and scaling methods.
Position positionAtOffset(double pos, double lateralOffset=0) const
Returns the position at the given length.
PositionVector reverse() const
reverse position vector
const std::string & getString(const T key) const
get string
void remove(const std::string str, const T key)
remove string
bool hasString(const std::string &str) const
check if the given string exist
T get(const std::string &str) const
get key
void insert(const std::string str, const T key, bool checkDuplicates=true)
insert string and their associated key
std::vector< std::string > getVector()
return vector of strings
static long long int toLong(const std::string &sData)
converts a string into the long value described by it by calling the char-type converter,...
static std::string to_lower_case(const std::string &str)
Transfers the content to lower case.
static double toDouble(const std::string &sData)
converts a string into the double value described by it by calling the char-type converter
static std::string latin1_to_utf8(std::string str)
Transfers from Latin 1 (ISO-8859-1) to UTF-8.
static bool endsWith(const std::string &str, const std::string suffix)
Checks whether a given string ends with the suffix.
static int toInt(const std::string &sData)
converts a string into the integer value described by it by calling the char-type converter,...
static bool toBool(const std::string &sData)
converts a string into the bool value described by it by calling the char-type converter
A complete call description for parsing a single db.
ParsingFunction function
Pointer to the function used for parsing.
std::string name
The name of the db.
long position
Position of the according db within the file.