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 !=
"") {
187 for (NIVisumTL_Map::iterator j =
myTLS.begin(); j !=
myTLS.end(); j++) {
212 if (line.length() > 0 && line[0] ==
'$') {
213 ParserVector::iterator i;
215 std::string dataName =
"$" + (*i).name +
":";
216 if (line.substr(0, dataName.length()) == dataName) {
218 (*i).pattern = line.substr(dataName.length());
226 if ((*i).position < 0) {
238 bool singleDataEndFound =
false;
241 if (line.length() == 0 || line[0] ==
'*' || line[0] ==
'$') {
242 singleDataEndFound =
true;
247 (this->*(*i).function)();
249 WRITE_ERROR(
"Too short value line in " + (*i).name +
" occurred.");
253 WRITE_ERROR(
"One of the needed values ('" + std::string(e.what()) +
"') is missing in " + (*i).name +
".");
263 for (NIVisumTL_Map::iterator j =
myTLS.begin(); j !=
myTLS.end(); j++) {
268 (*k).first->addShape((*k).second);
293 }
else if (speed < 0) {
398 if (speedS.find(
"km/h") != std::string::npos) {
399 speedS = speedS.substr(0, speedS.find(
"km/h"));
431 bool oneway_checked = oneway;
433 if (previous !=
nullptr) {
436 oneway_checked =
false;
439 oneway_checked =
false;
444 if (previous !=
nullptr) {
447 oneway_checked =
false;
453 if (nolanes != 0 && speed != 0) {
470 if (nolanes != 0 && speed != 0) {
489 myEdges[id] = std::make_pair(from, to);
510 if (dest ==
nullptr) {
520 if (dir.length() == 0) {
545 if (dest ==
nullptr) {
565 std::string
id = bez +
"-" + dest->
getID();
568 if (dir.length() == 0) {
574 bool hasContinuation =
false;
575 for (EdgeVector::const_iterator i = edges.begin(); i != edges.end(); ++i) {
576 if (!(*i)->isMacroscopicConnector()) {
577 hasContinuation =
true;
580 if (!hasContinuation) {
582 WRITE_WARNING(
"Incoming connector '" +
id +
"' will not be build - would be not connected to network.");
585 if (src ==
nullptr) {
586 WRITE_ERROR(
"The district '" + bez +
"' could not be built.");
589 NBEdge* edge =
new NBEdge(
id, src, dest,
"VisumConnector",
596 WRITE_ERROR(
"A duplicate edge id occurred (ID='" +
id +
"').");
600 if (edge !=
nullptr) {
608 bool hasPredeccessor =
false;
609 for (EdgeVector::const_iterator i = edges.begin(); i != edges.end(); ++i) {
610 if (!(*i)->isMacroscopicConnector()) {
611 hasPredeccessor =
true;
614 if (!hasPredeccessor) {
616 WRITE_WARNING(
"Outgoing connector '" +
id +
"' will not be build - would be not connected to network.");
619 if (src ==
nullptr) {
620 WRITE_ERROR(
"The district '" + bez +
"' could not be built.");
624 NBEdge* edge =
new NBEdge(
id, dest, src,
"VisumConnector",
631 WRITE_ERROR(
"A duplicate edge id occurred (ID='" +
id +
"').");
635 if (edge !=
nullptr) {
653 if (from ==
nullptr || via ==
nullptr || to ==
nullptr) {
665 if (src ==
nullptr) {
671 if (dest ==
nullptr) {
700 WRITE_ERROR(
"Error in geometry description from node '" + from->
getID() +
"' to node '" + to->
getID() +
"'.");
705 WRITE_ERROR(
"Unable to project coordinates for node '" + from->
getID() +
"'.");
736 if (baseEdge ==
nullptr) {
742 if (node ==
nullptr) {
748 if (edge ==
nullptr) {
759 WRITE_ERROR(
"A lane number for edge '" + edge->
getID() +
"' is not numeric (" + laneS +
").");
764 WRITE_ERROR(
"A lane number for edge '" + edge->
getID() +
"' is not positive (" + laneS +
").");
783 WRITE_ERROR(
"A lane length for edge '" + edge->
getID() +
"' is not numeric (" + lengthS +
").");
787 WRITE_ERROR(
"A lane length for edge '" + edge->
getID() +
"' is not positive (" + lengthS +
").");
817 bool mustRecheck =
true;
818 double seenLength = 0;
819 while (mustRecheck) {
822 std::string sub = edge->
getID();
823 sub = sub.substr(sub.rfind(
'_', sub.rfind(
'_') - 1));
824 sub = sub.substr(1, sub.find(
'_', 1) - 1);
845 double useLength = length - seenLength;
846 useLength = edge->
getLength() - useLength;
847 if (useLength < 0 || useLength > edge->
getLength()) {
851 std::string edgeID = edge->
getID();
854 edgeID = edgeID.substr(0, edgeID.find(
'_'));
860 std::string nid = edgeID +
"_" +
toString((
int) length) +
"_" + node->
getID();
900 auto tlIt =
myTLS.find(trafficLight);
901 if (n !=
nullptr && tlIt !=
myTLS.end()) {
902 tlIt->second->addNode(n);
904 WRITE_ERROR(
"Could not assign" + std::string(n ==
nullptr ?
" missing" :
"") +
" node '" + node
905 +
"' to" + std::string(tlIt ==
myTLS.end() ?
" missing" :
"") +
" traffic light '" + trafficLight +
"'");
919 WRITE_ERROR(
"Could not find TLS '" + LSAid +
"' for setting the signal group.");
922 myTLS.find(LSAid)->second->addSignalGroup(
myCurrentID, startTime, endTime, yellowTime);
932 WRITE_WARNING(
"Ignoring SIGNALGRUPPEZUFSABBIEGER because LsaNr is not known");
945 if (from ==
nullptr && to ==
nullptr) {
954 if (edg1 !=
nullptr && edg2 !=
nullptr) {
957 if (edg1->
getID()[0] ==
'-') {
958 sid = edg1->
getID().substr(1);
960 sid =
"-" + edg1->
getID();
962 if (sid.find(
'_') != std::string::npos) {
963 sid = sid.substr(0, sid.find(
'_'));
969 if (edg2->
getID()[0] ==
'-') {
970 sid = edg2->
getID().substr(1);
972 sid =
"-" + edg2->
getID();
974 if (sid.find(
'_') != std::string::npos) {
975 sid = sid.substr(0, sid.find(
'_'));
989 WRITE_ERROR(
"Unknown edge in TEILFLAECHENELEMENT");
1005 if (dir.length() > 0 && dir[0] ==
'1') {
1013 const std::vector<long long int>& areas =
mySubPartsAreas.find(
id)->second;
1014 for (std::vector<long long int>::const_iterator i = areas.begin(); i != areas.end(); ++i) {
1022 if (dir.length() > 0 && dir[0] ==
'1') {
1041 myTLS.find(LSAid)->second->addPhase(phaseid, startTime, endTime, yellowTime);
1054 SG.
phases()[Phaseid] = PH;
1060 NBEdge* fromEdge =
nullptr;
1061 NBEdge* toEdge =
nullptr;
1064 if (nodeID ==
"0") {
1067 if (fromEdge ==
nullptr) {
1071 WRITE_WARNING(
"Ignoring lane-to-lane connection (not yet implemented for this format version)");
1075 if (node ==
nullptr) {
1081 if (fromEdge ==
nullptr || toEdge ==
nullptr) {
1085 int fromLaneOffset = 0;
1095 int toLaneOffset = 0;
1109 WRITE_ERROR(
"A from-lane number for edge '" + fromEdge->
getID() +
"' is not numeric (" + fromLaneS +
").");
1114 WRITE_ERROR(
"A from-lane number for edge '" + fromEdge->
getID() +
"' is not positive (" + fromLaneS +
").");
1123 WRITE_ERROR(
"A to-lane number for edge '" + toEdge->
getID() +
"' is not numeric (" + toLaneS +
").");
1128 WRITE_ERROR(
"A to-lane number for edge '" + toEdge->
getID() +
"' is not positive (" + toLaneS +
").");
1132 if (fromLane - fromLaneOffset < 0) {
1135 fromLane = (int)fromEdge->
getNumLanes() - (fromLane - fromLaneOffset) - 1;
1137 if (toLane - toLaneOffset < 0) {
1140 toLane = (int)toEdge->
getNumLanes() - (toLane - toLaneOffset) - 1;
1144 WRITE_ERROR(
"A from-lane number for edge '" + fromEdge->
getID() +
"' is larger than the edge's lane number (" + fromLaneS +
").");
1148 WRITE_ERROR(
"A to-lane number for edge '" + toEdge->
getID() +
"' is larger than the edge's lane number (" + toLaneS +
").");
1164 WRITE_WARNINGF(
"Ignoring stopping place '%' without edge id",
id);
1165 }
else if (from ==
nullptr && to ==
nullptr) {
1166 WRITE_WARNINGF(
"Ignoring stopping place '%' without node informatio",
id);
1169 if (from !=
nullptr) {
1172 if (edge2 ==
nullptr) {
1173 WRITE_WARNINGF(
"Could not find edge with from-node '%' and base id '%' for stopping place '%'", from->
getID(), edge->
getID(),
id);
1183 if (edge2 ==
nullptr) {
1184 WRITE_WARNINGF(
"Could not find edge with to-node '%' and base id '%' for stopping place '%'", to->
getID(), edge->
getID(),
id);
1218 if (val.find(suffix) != std::string::npos) {
1219 val = val.substr(0, val.find(suffix));
1255 if (v ==
"bus" || v ==
"tcsp" || v ==
"acces tc" || v ==
"Accès tc" || v ==
"accès tc") {
1257 }
else if (v ==
"walk" || v ==
"w" || v ==
"f" || v ==
"ped" || v ==
"map") {
1259 }
else if (v ==
"l" || v ==
"lkw" || v ==
"h" || v ==
"hgv" || v ==
"lw" || v ==
"truck" || v ==
"tru" || v ==
"pl") {
1261 }
else if (v ==
"b" || v ==
"bike" || v ==
"velo") {
1263 }
else if (v ==
"train" || v ==
"rail") {
1265 }
else if (v ==
"tram") {
1267 }
else if (v ==
"p" || v ==
"pkw" || v ==
"car" || v ==
"c" || v ==
"vp" || v ==
"2rm") {
1283 if (node ==
nullptr) {
1284 WRITE_ERROR(
"The node '" + nodeS +
"' is not known.");
1293 if (node ==
nullptr) {
1314 if (edge ==
nullptr) {
1315 WRITE_ERROR(
"The edge '" + edgeS +
"' is not known.");
1335 if (edge->
getID()[0] ==
'-') {
1336 sid = edge->
getID().substr(1);
1338 sid =
"-" + edge->
getID();
1340 if (sid.find(
'_') != std::string::npos) {
1341 sid = sid.substr(0, sid.find(
'_'));
1349 if (begin ==
nullptr) {
1353 std::string edgeID = ret->
getID();
1355 while (ret !=
nullptr) {
1361 if (nedges.size() != 1) {
1366 NBEdge* next = nedges[0];
1367 if (ret->
getID().substr(0, edgeID.length()) != next->
getID().substr(0, edgeID.length())) {
1381 while (ret !=
nullptr) {
1387 if (nedges.size() != 1) {
1392 NBEdge* next = nedges[0];
1393 if (ret->
getID().substr(0, edgeID.length()) != next->
getID().substr(0, edgeID.length())) {
1412 if (edge ==
nullptr) {
1413 WRITE_ERROR(
"The edge '" + edgeS +
"' is not known.");
1432 EdgeVector::const_iterator i;
1434 if (ToNode == (*i)->getToNode()) {
1447 value = value.substr(0, value.length() - 4);
1458 return defaultValue;
1475 double defaultValue) {
1492 const std::string& fieldName2) {
1510 if (dist ==
nullptr) {
1515 nid =
id +
"-" + dest->
getID();
1521 WRITE_ERROR(
"Could not build connector node '" + nid +
"'.");
1530 if (from ==
nullptr) {
1531 WRITE_ERROR(
" The from-node was not found within the net");
1533 if (to ==
nullptr) {
1534 WRITE_ERROR(
" The to-node was not found within the net");
1539 return from !=
nullptr && to !=
nullptr && from != to;
1544 return (edge->
getID().length() > node->
getID().length() + 1
1545 && (edge->
getID().substr(edge->
getID().length() - node->
getID().length() - 1) ==
"_" + node->
getID()));
1550 std::ifstream strm(file.c_str());
1552 throw ProcessError(
"Could not load VISUM language map from '" + file +
"'.");
1554 while (strm.good()) {
1563 }
else if (keyDE !=
"") {
1564 WRITE_WARNING(
"Unknown entry '" + keyDE +
"' in VISUM language map");
#define WRITE_WARNINGF(...)
#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
@ 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
int SVCPermissions
bitset where each bit declares whether a certain SVC may use this edge/lane
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.
bool addEdge2EdgeConnection(NBEdge *dest, bool overrideRemoval=false)
Adds a connection to another edge.
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
void incLaneNo(int by)
increment lane
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.
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 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.
@ 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.
static bool transformCoordinate(Position &from, bool includeInBoundary=true, GeoConvHelper *from_srs=0)
transforms loaded coordinates handles projections, offsets (using GeoConvHelper) and import of height...
NBEdgeCont & getEdgeCont()
NBPTStopCont & getPTStopCont()
Returns a reference to the pt stop container.
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(NBPTStop *ptStop)
Inserts a node into the map.
The representation of a single pt stop.
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 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 to_lower_case(std::string str)
Transfers the content to lower case.
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.