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) {
396 if (speedS.find(
"km/h") != std::string::npos) {
397 speedS = speedS.substr(0, speedS.find(
"km/h"));
429 bool oneway_checked = oneway;
431 if (previous !=
nullptr) {
434 oneway_checked =
false;
437 oneway_checked =
false;
442 if (previous !=
nullptr) {
445 oneway_checked =
false;
451 if (nolanes != 0 && speed != 0) {
468 if (nolanes != 0 && speed != 0) {
487 myEdges[id] = std::make_pair(from, to);
508 if (dest ==
nullptr) {
518 if (dir.length() == 0) {
543 if (dest ==
nullptr) {
563 std::string
id = bez +
"-" + dest->
getID();
566 if (dir.length() == 0) {
572 bool hasContinuation =
false;
573 for (EdgeVector::const_iterator i = edges.begin(); i != edges.end(); ++i) {
574 if (!(*i)->isMacroscopicConnector()) {
575 hasContinuation =
true;
578 if (!hasContinuation) {
580 WRITE_WARNINGF(
TL(
"Incoming connector '%' will not be build - would be not connected to network."),
id);
583 if (src ==
nullptr) {
587 NBEdge* edge =
new NBEdge(
id, src, dest,
"VisumConnector",
598 if (edge !=
nullptr) {
606 bool hasPredeccessor =
false;
607 for (EdgeVector::const_iterator i = edges.begin(); i != edges.end(); ++i) {
608 if (!(*i)->isMacroscopicConnector()) {
609 hasPredeccessor =
true;
612 if (!hasPredeccessor) {
614 WRITE_WARNINGF(
TL(
"Outgoing connector '%' will not be build - would be not connected to network."),
id);
617 if (src ==
nullptr) {
622 NBEdge* edge =
new NBEdge(
id, dest, src,
"VisumConnector",
633 if (edge !=
nullptr) {
651 if (from ==
nullptr || via ==
nullptr || to ==
nullptr) {
663 if (src ==
nullptr) {
669 if (dest ==
nullptr) {
734 if (baseEdge ==
nullptr) {
740 if (node ==
nullptr) {
746 if (edge ==
nullptr) {
781 WRITE_ERRORF(
TL(
"A lane length for edge '%' is not numeric (%)."), edge->
getID(), lengthS);
785 WRITE_ERRORF(
TL(
"A lane length for edge '%' is not positive (%)."), edge->
getID(), lengthS);
815 bool mustRecheck =
true;
816 double seenLength = 0;
817 while (mustRecheck) {
820 std::string sub = edge->
getID();
821 sub = sub.substr(sub.rfind(
'_', sub.rfind(
'_') - 1));
822 sub = sub.substr(1, sub.find(
'_', 1) - 1);
843 double useLength = length - seenLength;
844 useLength = edge->
getLength() - useLength;
845 if (useLength < 0 || useLength > edge->
getLength()) {
849 std::string edgeID = edge->
getID();
852 edgeID = edgeID.substr(0, edgeID.find(
'_'));
858 std::string nid = edgeID +
"_" +
toString((
int) length) +
"_" + node->
getID();
898 auto tlIt =
myTLS.find(trafficLight);
899 if (n !=
nullptr && tlIt !=
myTLS.end()) {
900 tlIt->second->addNode(n);
902 WRITE_ERROR(
"Could not assign" + std::string(n ==
nullptr ?
" missing" :
"") +
" node '" + node
903 +
"' to" + std::string(tlIt ==
myTLS.end() ?
" missing" :
"") +
" traffic light '" + trafficLight +
"'");
917 WRITE_ERRORF(
TL(
"Could not find TLS '%' for setting the signal group."), LSAid);
920 myTLS.find(LSAid)->second->addSignalGroup(
myCurrentID, startTime, endTime, yellowTime);
930 WRITE_WARNING(
TL(
"Ignoring SIGNALGRUPPEZUFSABBIEGER because LsaNr is not known"));
943 if (from ==
nullptr && to ==
nullptr) {
952 if (edg1 !=
nullptr && edg2 !=
nullptr) {
955 if (edg1->
getID()[0] ==
'-') {
956 sid = edg1->
getID().substr(1);
958 sid =
"-" + edg1->
getID();
960 if (sid.find(
'_') != std::string::npos) {
961 sid = sid.substr(0, sid.find(
'_'));
967 if (edg2->
getID()[0] ==
'-') {
968 sid = edg2->
getID().substr(1);
970 sid =
"-" + edg2->
getID();
972 if (sid.find(
'_') != std::string::npos) {
973 sid = sid.substr(0, sid.find(
'_'));
1003 if (dir.length() > 0 && dir[0] ==
'1') {
1011 const std::vector<long long int>& areas =
mySubPartsAreas.find(
id)->second;
1012 for (std::vector<long long int>::const_iterator i = areas.begin(); i != areas.end(); ++i) {
1020 if (dir.length() > 0 && dir[0] ==
'1') {
1039 myTLS.find(LSAid)->second->addPhase(phaseid, startTime, endTime, yellowTime);
1052 SG.
phases()[Phaseid] = PH;
1058 NBEdge* fromEdge =
nullptr;
1059 NBEdge* toEdge =
nullptr;
1062 if (nodeID ==
"0") {
1065 if (fromEdge ==
nullptr) {
1069 WRITE_WARNING(
TL(
"Ignoring lane-to-lane connection (not yet implemented for this format version)"));
1073 if (node ==
nullptr) {
1079 if (fromEdge ==
nullptr || toEdge ==
nullptr) {
1083 int fromLaneOffset = 0;
1093 int toLaneOffset = 0;
1107 WRITE_ERRORF(
TL(
"A from-lane number for edge '%' is not numeric (%)."), fromEdge->
getID(), fromLaneS);
1112 WRITE_ERRORF(
TL(
"A from-lane number for edge '%' is not positive (%)."), fromEdge->
getID(), fromLaneS);
1121 WRITE_ERRORF(
TL(
"A to-lane number for edge '%' is not numeric (%)."), toEdge->
getID(), toLaneS);
1126 WRITE_ERRORF(
TL(
"A to-lane number for edge '%' is not positive (%)."), toEdge->
getID(), toLaneS);
1130 if (fromLane - fromLaneOffset < 0) {
1133 fromLane = (int)fromEdge->
getNumLanes() - (fromLane - fromLaneOffset) - 1;
1135 if (toLane - toLaneOffset < 0) {
1138 toLane = (int)toEdge->
getNumLanes() - (toLane - toLaneOffset) - 1;
1142 WRITE_ERRORF(
TL(
"A from-lane number for edge '%' is larger than the edge's lane number (%)."), fromEdge->
getID(), fromLaneS);
1146 WRITE_ERRORF(
TL(
"A to-lane number for edge '%' is larger than the edge's lane number (%)."), toEdge->
getID(), toLaneS);
1163 }
else if (from ==
nullptr && to ==
nullptr) {
1164 WRITE_WARNINGF(
TL(
"Ignoring stopping place '%' without node information"),
id);
1167 if (edge ==
nullptr) {
1168 WRITE_WARNINGF(
TL(
"Ignoring stopping place '%' with invalid edge reference '%'"),
id, edgeID);
1170 }
else if (from !=
nullptr) {
1173 if (edge2 ==
nullptr) {
1174 WRITE_WARNINGF(
TL(
"Could not find edge with from-node '%' and base id '%' for stopping place '%'"), from->
getID(), edge->
getID(),
id);
1184 if (edge2 ==
nullptr) {
1185 WRITE_WARNINGF(
TL(
"Could not find edge with to-node '%' and base id '%' for stopping place '%'"), to->
getID(), edge->
getID(),
id);
1198 std::shared_ptr<NBPTStop> ptStop = std::make_shared<NBPTStop>(
id, pos, edge->
getID(), edge->
getID(), length, name, permissions);
1208 if (val.find(suffix) != std::string::npos) {
1209 val = val.substr(0, val.find(suffix));
1245 if (v ==
"bus" || v ==
"tcsp" || v ==
"acces tc" || v ==
"Accès tc" || v ==
"accès tc") {
1247 }
else if (v ==
"walk" || v ==
"w" || v ==
"f" || v ==
"ped" || v ==
"map") {
1249 }
else if (v ==
"l" || v ==
"lkw" || v ==
"h" || v ==
"hgv" || v ==
"lw" || v ==
"truck" || v ==
"tru" || v ==
"pl") {
1251 }
else if (v ==
"b" || v ==
"bike" || v ==
"velo") {
1253 }
else if (v ==
"train" || v ==
"rail") {
1255 }
else if (v ==
"tram") {
1257 }
else if (v ==
"p" || v ==
"pkw" || v ==
"car" || v ==
"c" || v ==
"vp" || v ==
"2rm") {
1273 if (node ==
nullptr) {
1283 if (node ==
nullptr) {
1304 if (edge ==
nullptr) {
1325 if (edge->
getID()[0] ==
'-') {
1326 sid = edge->
getID().substr(1);
1328 sid =
"-" + edge->
getID();
1330 if (sid.find(
'_') != std::string::npos) {
1331 sid = sid.substr(0, sid.find(
'_'));
1339 if (begin ==
nullptr) {
1343 std::string edgeID = ret->
getID();
1345 while (ret !=
nullptr) {
1351 if (nedges.size() != 1) {
1356 NBEdge* next = nedges[0];
1357 if (ret->
getID().substr(0, edgeID.length()) != next->
getID().substr(0, edgeID.length())) {
1371 while (ret !=
nullptr) {
1377 if (nedges.size() != 1) {
1382 NBEdge* next = nedges[0];
1383 if (ret->
getID().substr(0, edgeID.length()) != next->
getID().substr(0, edgeID.length())) {
1402 if (edge ==
nullptr) {
1422 EdgeVector::const_iterator i;
1424 if (ToNode == (*i)->getToNode()) {
1437 value = value.substr(0, value.length() - 4);
1448 return defaultValue;
1465 double defaultValue) {
1482 const std::string& fieldName2) {
1500 if (dist ==
nullptr) {
1505 nid =
id +
"-" + dest->
getID();
1520 if (from ==
nullptr) {
1521 WRITE_ERROR(
TL(
" The from-node was not found within the net"));
1523 if (to ==
nullptr) {
1524 WRITE_ERROR(
TL(
" The to-node was not found within the net"));
1529 return from !=
nullptr && to !=
nullptr && from != to;
1534 return (edge->
getID().length() > node->
getID().length() + 1
1535 && (edge->
getID().substr(edge->
getID().length() - node->
getID().length() - 1) ==
"_" + node->
getID()));
1540 std::ifstream strm(file.c_str());
1542 throw ProcessError(
TLF(
"Could not load VISUM language map from '%'.", file));
1544 while (strm.good()) {
1553 }
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
static const double UNSPECIFIED_FRICTION
unspecified lane friction
void incLaneNo(int by)
increment lane
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
NBNode * getToNode() const
Returns the destination node of the edge.
void setLaneSpreadFunction(LaneSpreadFunction spread)
(Re)sets how the lanes lateral offset shall be computed
int getNumLanes() const
Returns the number of lanes.
const PositionVector & getGeometry() const
Returns the geometry of the edge.
@ VALIDATED
The connection was computed and validated.
static const double UNSPECIFIED_WIDTH
unspecified lane width
static const double UNSPECIFIED_OFFSET
unspecified lane offset
void setAsMacroscopicConnector()
NBNode * getFromNode() const
Returns the origin node of the edge.
static std::string normalIDRepresentation(const std::string &id)
converts the numerical id to its "normal" string representation
Instance responsible for building networks.
NBDistrictCont & getDistrictCont()
Returns a reference the districts container.
NBTypeCont & getTypeCont()
Returns a reference to the type container.
NBEdgeCont & getEdgeCont()
NBPTStopCont & getPTStopCont()
Returns a reference to the pt stop 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...
NBNodeCont & getNodeCont()
Returns a reference to the node container.
NBTrafficLightLogicCont & getTLLogicCont()
Returns a reference to the traffic light logics container.
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 & getOutgoingEdges() const
Returns this node's outgoing edges (The edges which start at this node)
const EdgeVector & getIncomingEdges() const
Returns this node's incoming edges (The edges which yield in 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
void remove(const std::string str, const T key)
bool hasString(const std::string &str) const
const std::string & getString(const T key) const
T get(const std::string &str) const
void insert(const std::string str, const T key, bool checkDuplicates=true)
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.