42 {
"VSYS", VISUM_SYS },
43 {
"STRECKENTYP", VISUM_LINKTYPE },
44 {
"KNOTEN", VISUM_NODE },
45 {
"BEZIRK", VISUM_DISTRICT },
46 {
"PUNKT", VISUM_POINT },
47 {
"STRECKE", VISUM_LINK },
49 {
"VSYSSET", VISUM_TYPES },
50 {
"RANG", VISUM_RANK },
51 {
"KAPIV", VISUM_CAPACITY },
52 {
"XKOORD", VISUM_XCOORD },
53 {
"YKOORD", VISUM_YCOORD },
54 {
"VONKNOTNR", VISUM_FROMNODE },
55 {
"NACHKNOTNR", VISUM_TONODE },
56 {
"TYPNR", VISUM_TYPE },
73 if (!oc.
isSet(
"visum-file")) {
79 oc.
getBool(
"visum.use-type-priority"),
90 const std::string& file,
93 const std::string& languageFile) :
96 if (languageFile !=
"") {
152 for (NIVisumTL_Map::iterator j =
myTLS.begin(); j !=
myTLS.end(); j++) {
177 if (line.length() > 0 && line[0] ==
'$') {
178 ParserVector::iterator i;
180 std::string dataName =
"$" + (*i).name +
":";
181 if (line.substr(0, dataName.length()) == dataName) {
183 (*i).pattern = line.substr(dataName.length());
191 if ((*i).position < 0) {
203 bool singleDataEndFound =
false;
206 if (line.length() == 0 || line[0] ==
'*' || line[0] ==
'$') {
207 singleDataEndFound =
true;
212 (this->*(*i).function)();
214 WRITE_ERROR(
"Too short value line in " + (*i).name +
" occurred.");
218 WRITE_ERROR(
"One of the needed values ('" + std::string(e.what()) +
"') is missing in " + (*i).name +
".");
226 for (NIVisumTL_Map::iterator j =
myTLS.begin(); j !=
myTLS.end(); j++) {
231 (*k).first->addShape((*k).second);
256 }
else if (speed < 0) {
266 myNetBuilder.
getTypeCont().
insert(
myCurrentID, numLanes, speed / (
double) 3.6, priority, permissions,
NBEdge::UNSPECIFIED_WIDTH,
false,
NBEdge::UNSPECIFIED_WIDTH,
NBEdge::UNSPECIFIED_WIDTH, 0, 0, 0);
359 if (speedS.find(
"km/h") != std::string::npos) {
360 speedS = speedS.substr(0, speedS.find(
"km/h"));
392 bool oneway_checked = oneway;
394 if (previous !=
nullptr) {
397 oneway_checked =
false;
400 oneway_checked =
false;
405 if (previous !=
nullptr) {
408 oneway_checked =
false;
413 if (nolanes != 0 && speed != 0) {
431 if (nolanes != 0 && speed != 0) {
451 myEdges[id] = std::make_pair(from, to);
476 if (dest ==
nullptr) {
495 std::string
id = bez +
"-" + dest->getID();
498 if (dir.length() == 0) {
502 if (dir.find(
'Q') != std::string::npos) {
503 const EdgeVector& edges = dest->getOutgoingEdges();
504 bool hasContinuation =
false;
505 for (EdgeVector::const_iterator i = edges.begin(); i != edges.end(); ++i) {
506 if (!(*i)->isMacroscopicConnector()) {
507 hasContinuation =
true;
510 if (!hasContinuation) {
512 WRITE_WARNING(
"Incoming connector '" +
id +
"' will not be build - would be not connected to network.");
515 if (src ==
nullptr) {
516 WRITE_ERROR(
"The district '" + bez +
"' could not be built.");
519 NBEdge* edge =
new NBEdge(
id, src, dest,
"VisumConnector",
526 WRITE_ERROR(
"A duplicate edge id occurred (ID='" +
id +
"').");
530 if (edge !=
nullptr) {
536 if (dir.find(
'Z') != std::string::npos) {
537 const EdgeVector& edges = dest->getIncomingEdges();
538 bool hasPredeccessor =
false;
539 for (EdgeVector::const_iterator i = edges.begin(); i != edges.end(); ++i) {
540 if (!(*i)->isMacroscopicConnector()) {
541 hasPredeccessor =
true;
544 if (!hasPredeccessor) {
546 WRITE_WARNING(
"Outgoing connector '" +
id +
"' will not be build - would be not connected to network.");
549 if (src ==
nullptr) {
550 WRITE_ERROR(
"The district '" + bez +
"' could not be built.");
554 NBEdge* edge =
new NBEdge(
id, dest, src,
"VisumConnector",
561 WRITE_ERROR(
"A duplicate edge id occurred (ID='" +
id +
"').");
565 if (edge !=
nullptr) {
583 if (from ==
nullptr || via ==
nullptr || to ==
nullptr) {
593 NBEdge* dest = via->getConnectionTo(to);
595 if (src ==
nullptr) {
597 WRITE_WARNING(
"There is no edge from node '" + from->
getID() +
"' to node '" + via->getID() +
"'.");
601 if (dest ==
nullptr) {
603 WRITE_WARNING(
"There is no edge from node '" + via->getID() +
"' to node '" + to->
getID() +
"'.");
630 WRITE_ERROR(
"Error in geometry description from node '" + from->
getID() +
"' to node '" + to->getID() +
"'.");
635 WRITE_ERROR(
"Unable to project coordinates for node '" + from->
getID() +
"'.");
644 e = to->getConnectionTo(from);
652 WRITE_WARNING(
"There is no edge from node '" + from->
getID() +
"' to node '" + to->getID() +
"'.");
666 if (baseEdge ==
nullptr) {
672 if (node ==
nullptr) {
678 if (edge ==
nullptr) {
689 WRITE_ERROR(
"A lane number for edge '" + edge->
getID() +
"' is not numeric (" + laneS +
").");
694 WRITE_ERROR(
"A lane number for edge '" + edge->
getID() +
"' is not positive (" + laneS +
").");
713 WRITE_ERROR(
"A lane length for edge '" + edge->
getID() +
"' is not numeric (" + lengthS +
").");
717 WRITE_ERROR(
"A lane length for edge '" + edge->
getID() +
"' is not positive (" + lengthS +
").");
747 bool mustRecheck =
true;
748 double seenLength = 0;
749 while (mustRecheck) {
752 std::string sub = edge->
getID();
753 sub = sub.substr(sub.rfind(
'_', sub.rfind(
'_') - 1));
754 sub = sub.substr(1, sub.find(
'_', 1) - 1);
775 double useLength = length - seenLength;
776 useLength = edge->
getLength() - useLength;
777 if (useLength < 0 || useLength > edge->
getLength()) {
781 std::string edgeID = edge->
getID();
784 edgeID = edgeID.substr(0, edgeID.find(
'_'));
790 std::string nid = edgeID +
"_" +
toString((
int) length) +
"_" + node->
getID();
828 auto tlIt =
myTLS.find(trafficLight);
829 if (n !=
nullptr && tlIt !=
myTLS.end()) {
830 tlIt->second->addNode(n);
832 WRITE_ERROR(
"Could not assign" + std::string(n ==
nullptr ?
" missing" :
"") +
" node '" + node
833 +
"' to" + std::string(tlIt ==
myTLS.end() ?
" missing" :
"") +
" traffic light '" + trafficLight +
"'");
847 WRITE_ERROR(
"Could not find TLS '" + LSAid +
"' for setting the signal group.");
860 WRITE_WARNING(
"Ignoring SIGNALGRUPPEZUFSABBIEGER because LsaNr is not known");
873 if (from ==
nullptr && to ==
nullptr) {
882 if (edg1 !=
nullptr && edg2 !=
nullptr) {
885 if (edg1->
getID()[0] ==
'-') {
886 sid = edg1->
getID().substr(1);
888 sid =
"-" + edg1->
getID();
890 if (sid.find(
'_') != std::string::npos) {
891 sid = sid.substr(0, sid.find(
'_'));
897 if (edg2->
getID()[0] ==
'-') {
898 sid = edg2->
getID().substr(1);
900 sid =
"-" + edg2->
getID();
902 if (sid.find(
'_') != std::string::npos) {
903 sid = sid.substr(0, sid.find(
'_'));
917 WRITE_ERROR(
"Unknown edge in TEILFLAECHENELEMENT");
933 if (dir.length() > 0 && dir[0] ==
'1') {
941 const std::vector<long long int>& areas =
mySubPartsAreas.find(
id)->second;
942 for (std::vector<long long int>::const_iterator i = areas.begin(); i != areas.end(); ++i) {
950 if (dir.length() > 0 && dir[0] ==
'1') {
982 SG.
phases()[Phaseid] = PH;
988 NBEdge* fromEdge =
nullptr;
995 if (fromEdge ==
nullptr) {
999 WRITE_WARNING(
"Ignoring lane-to-lane connection (not yet implemented for this format version)");
1003 if (node ==
nullptr) {
1009 if (fromEdge ==
nullptr || toEdge ==
nullptr) {
1013 int fromLaneOffset = 0;
1023 int toLaneOffset = 0;
1037 WRITE_ERROR(
"A from-lane number for edge '" + fromEdge->
getID() +
"' is not numeric (" + fromLaneS +
").");
1042 WRITE_ERROR(
"A from-lane number for edge '" + fromEdge->
getID() +
"' is not positive (" + fromLaneS +
").");
1051 WRITE_ERROR(
"A to-lane number for edge '" + toEdge->
getID() +
"' is not numeric (" + toLaneS +
").");
1056 WRITE_ERROR(
"A to-lane number for edge '" + toEdge->
getID() +
"' is not positive (" + toLaneS +
").");
1060 if (fromLane - fromLaneOffset < 0) {
1063 fromLane = (int)fromEdge->
getNumLanes() - (fromLane - fromLaneOffset) - 1;
1065 if (toLane - toLaneOffset < 0) {
1068 toLane = (int)toEdge->
getNumLanes() - (toLane - toLaneOffset) - 1;
1072 WRITE_ERROR(
"A from-lane number for edge '" + fromEdge->
getID() +
"' is larger than the edge's lane number (" + fromLaneS +
").");
1076 WRITE_ERROR(
"A to-lane number for edge '" + toEdge->
getID() +
"' is larger than the edge's lane number (" + toLaneS +
").");
1099 if (val.find(suffix) != std::string::npos) {
1100 val = val.substr(0, val.find(suffix));
1134 std::transform(v.begin(), v.end(), v.begin(), tolower);
1137 }
else if (v ==
"walk" || v ==
"w" || v ==
"f" || v ==
"ped") {
1139 }
else if (v ==
"l" || v ==
"lkw" || v ==
"h" || v ==
"hgv" || v ==
"lw" || v ==
"truck" || v ==
"tru") {
1141 }
else if (v ==
"b" || v ==
"bike") {
1143 }
else if (v ==
"train" || v ==
"rail") {
1145 }
else if (v ==
"tram") {
1147 }
else if (v ==
"p" || v ==
"pkw" || v ==
"car" || v ==
"c") {
1163 if (node ==
nullptr) {
1164 WRITE_ERROR(
"The node '" + nodeS +
"' is not known.");
1173 if (node ==
nullptr) {
1194 if (edge ==
nullptr) {
1195 WRITE_ERROR(
"The edge '" + edgeS +
"' is not known.");
1215 if (edge->
getID()[0] ==
'-') {
1216 sid = edge->
getID().substr(1);
1218 sid =
"-" + edge->
getID();
1220 if (sid.find(
'_') != std::string::npos) {
1221 sid = sid.substr(0, sid.find(
'_'));
1229 if (begin ==
nullptr) {
1233 std::string edgeID = ret->
getID();
1235 while (ret !=
nullptr) {
1241 if (nedges.size() != 1) {
1246 NBEdge* next = nedges[0];
1247 if (ret->
getID().substr(0, edgeID.length()) != next->
getID().substr(0, edgeID.length())) {
1261 while (ret !=
nullptr) {
1267 if (nedges.size() != 1) {
1272 NBEdge* next = nedges[0];
1273 if (ret->
getID().substr(0, edgeID.length()) != next->
getID().substr(0, edgeID.length())) {
1292 if (edge ==
nullptr) {
1293 WRITE_ERROR(
"The edge '" + edgeS +
"' is not known.");
1312 EdgeVector::const_iterator i;
1314 if (ToNode == (*i)->getToNode()) {
1327 value = value.substr(0, value.length() - 4);
1338 return defaultValue;
1355 double defaultValue) {
1372 const std::string& fieldName2) {
1390 if (dist ==
nullptr) {
1395 nid =
id +
"-" + dest->
getID();
1401 WRITE_ERROR(
"Could not build connector node '" + nid +
"'.");
1410 if (from ==
nullptr) {
1411 WRITE_ERROR(
" The from-node was not found within the net");
1413 if (to ==
nullptr) {
1414 WRITE_ERROR(
" The to-node was not found within the net");
1419 return from !=
nullptr && to !=
nullptr && from != to;
1424 return (edge->
getID().length() > node->
getID().length() + 1
1425 && (edge->
getID().substr(edge->
getID().length() - node->
getID().length() - 1) ==
"_" + node->
getID()));
1430 std::ifstream strm(file.c_str());
1432 throw ProcessError(
"Could not load VISUM language map from '" + file +
"'.");
1434 while (strm.good()) {
1443 }
else if (keyDE !=
"") {
1444 WRITE_WARNING(
"Unknown entry '" + keyDE +
"' in VISUM language map");
std::map< std::string, Phase * > & phases()
Returns the phases map.
NBNode * retrieve(const std::string &id) const
Returns the node with the given name.
double getLength() const
Returns the computed length of the edge.
NBDistrict * retrieve(const std::string &id) const
Returns the districts with the given id.
long position
Position of the according db within the file.
unsigned long getPosition()
Returns the current position within the file.
void parse_NodesToTrafficLights()
Parses KNOTENZULSA/SIGNALANLAGEZUKNOTEN.
double getSpeed(const std::string &type) const
Returns the maximal velocity for the given type [m/s].
A signal group can be defined either by a time period or by phases.
NBTypeCont & getTypeCont()
Returns a reference to the type container.
void parse_Kante()
Parses FLAECHENELEMENT.
bool myUseVisumPrio
Information whether VISUM priority information shall be used.
void load()
Parses the VISUM-network file storing the parsed structures within myNetBuilder.
static bool transformCoordinate(Position &from, bool includeInBoundary=true, GeoConvHelper *from_srs=0)
transforms loaded coordinates handles projections, offsets (using GeoConvHelper) and import of height...
void remove(const std::string str, const T key)
std::map< NBDistrict *, PositionVector > myDistrictShapes
A temporary storage for district shapes as they are filled incrementally.
LineReader myLineReader
The line reader to use to read from the file.
std::vector< std::string > myTouchedEdges
Already read edges.
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...
static bool endsWith(const std::string &str, const std::string suffix)
Checks whether a given string ends with the suffix.
bool readLine(LineHandler &lh)
Reads a single (the next) line from the file and reports it to the given LineHandler.
static bool isSplitEdge(NBEdge *edge, NBNode *node)
whether the edge id ends with _nodeID
std::string myCurrentID
The name of the currently parsed item used for error reporting.
void parse_Turns()
Parses ABBIEGEBEZIEHUNG/ABBIEGER.
NIImporter_VISUM(NBNetBuilder &nb, const std::string &file, NBCapacity2Lanes capacity2Lanes, bool useVisumPrio, const std::string &languageFile)
constructor
vehicle is a not electrified rail
VSysTypeNames myVSysTypes
The used vsystypes.
NBNode * getNamedNode(const std::string &fieldName)
Tries to get the node which name is stored in the given field.
void parse_TrafficLights()
Parses LSA/SIGNALANLAGE.
void loadLanguage(const std::string &file)
A helper class which computes the lane number from given capacity.
const std::string & getString(const T key) const
int SVCPermissions
bitset where each bit declares whether a certain SVC may use this edge/lane
The representation of a single edge during network building.
void parse_PartOfArea()
Parses FLAECHENELEMENT.
int getPriority(const std::string &type) const
Returns the priority for the given type.
static const double UNSPECIFIED_OFFSET
unspecified lane offset
void parse_SignalGroupsToPhases()
Parses LSASIGNALGRUPPEZULSAPHASE.
bool setFile(const std::string &file)
Reinitialises the reader for reading from the given file.
void setPermissions(SVCPermissions permissions, int lane=-1)
set allowed/disallowed classes for the given lane or for all lanes if -1 is given ...
void parse_EdgePolys()
Parses STRECKENPOLY.
bool markAsSet(const std::string &id, const SumoXMLAttr attr)
Marks an attribute of a type as set.
bool splitAt(NBDistrictCont &dc, NBEdge *edge, NBNode *node)
Splits the edge at the position nearest to the given node.
PositionVector reverse() const
reverse position vector
void parse_Phases()
Parses LSAPHASE/PHASE.
int getNumLanes(const std::string &type) const
Returns the number of lanes for the given type.
bool getBool(const std::string &name) const
Returns the boolean-value of the named option (only for Option_Bool)
const std::string & getID() const
Returns the id.
std::string myFileName
The name of the parsed file, for error reporting.
void parse_AreaSubPartElement()
Parses ABBZULSASIGNALGRUPPE/SIGNALGRUPPEZUABBIEGER.
std::string get(const std::string &name, bool prune=false) const
Returns the named information.
static const double UNSPECIFIED_WIDTH
unspecified lane width
NBEdge * getReversedContinuating(NBEdge *edge, NBNode *node)
Returns the opposite direction of the given edge.
#define WRITE_WARNING(msg)
void parse_SignalGroups()
Parses LSASIGNALGRUPPE/SIGNALGRUPPE.
static void loadNetwork(const OptionsCont &oc, NBNetBuilder &nb)
Loads network definition from the assigned option and stores it in the given network builder...
The connection was computed and validated.
static OptionsCont & getOptions()
Retrieves the options.
A VISUM network importer.
const EdgeVector & getOutgoingEdges() const
Returns this node's outgoing edges (The edges which start at this node)
static bool toBool(const std::string &sData)
converts a string into the bool value described by it by calling the char-type converter ...
vehicle is a large transport vehicle
void parse_TurnsToSignalGroups()
Parses ABBZULSASIGNALGRUPPE/SIGNALGRUPPEZUABBIEGER.
bool addLane2LaneConnection(int fromLane, NBEdge *dest, int toLane, Lane2LaneInfoType type, bool mayUseSameDestination=false, bool mayDefinitelyPass=false, bool keepClear=true, double contPos=UNSPECIFIED_CONTPOS, double visibility=UNSPECIFIED_VISIBILITY_DISTANCE, double speed=UNSPECIFIED_SPEED, const PositionVector &customShape=PositionVector::EMPTY, const bool uncontrolled=UNSPECIFIED_CONNECTION_UNCONTROLLED)
Adds a connection between the specified this edge's lane and an approached one.
A class representing a single district.
NBEdge * getConnectionTo(NBNode *n) const
get connection to certain node
bool isSet(const std::string &name, bool failOnNonExistant=true) const
Returns the information whether the named option is set.
void reinit(const std::string &def, const std::string &defDelim=";", const std::string &lineDelim=";", bool chomp=false, bool ignoreCase=true)
Reinitialises the parser.
bool addEdge2EdgeConnection(NBEdge *dest)
Adds a connection to another edge.
void insert(const std::string str, const T key, bool checkDuplicates=true)
void incLaneNo(int by)
increment lane
std::string getNamedString(const std::string &fieldName)
Returns the value from the named column as a normalised string.
static std::string normalIDRepresentation(const std::string &id)
converts the numerical id to its "normal" string representation
bool addSource(const std::string &dist, NBEdge *const source, double weight)
Adds a source to the named district.
bool know(const std::string &name) const
Returns the information whether the named column is known.
static StringBijection< VISUM_KEY >::Entry KEYS_DE[]
Strings for the keywords.
double getNamedFloat(const std::string &fieldName)
Returns the value from the named column as a float.
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.
A complete call description for parsing a single db.
bool insert(NBEdge *edge, bool ignorePrunning=false)
Adds an edge to the dictionary.
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
NIVisumTL_Map myTLS
List of visum traffic lights.
int get(double capacity) const
Returns the number of lanes computed from the given capacity.
void parse_Connectors()
Parses ANBINDUNG.
static double toDouble(const std::string &sData)
converts a string into the double value described by it by calling the char-type converter ...
int getNumLanes() const
Returns the number of lanes.
A point in 2D or 3D with translation and scaling methods.
NBEdgeCont & getEdgeCont()
T get(const std::string &str) const
std::string getString(const std::string &name) const
Returns the string-value of the named option (only for Option_String)
void setAsMacroscopicConnector()
double getWeightedFloat2(const std::string &name, const std::string &name2, const std::string &suffix)
as above but with two alternative names
const std::string & getID() const
std::map< long long int, std::vector< long long int > > mySubPartsAreas
A map from area parts to area ids.
bool addSink(const std::string &dist, NBEdge *const destination, double weight)
Adds a sink to the named district.
#define PROGRESS_BEGIN_MESSAGE(msg)
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_Districts()
Parses BEZIRK.
void addParser(const std::string &name, ParsingFunction function)
Adds a parser into the sorted list of parsers to use.
bool hasOutgoing(const NBEdge *const e) const
Returns whether the given edge starts at this node.
ParserVector mySingleDataParsers
List of known parsers.
static int toInt(const std::string &sData)
converts a string into the integer value described by it by calling the char-type converter...
std::map< long long int, Position > myPoints
A map of point ids to positions.
void parse_Point()
Parses PUNKT.
void(NIImporter_VISUM::* ParsingFunction)()
Definition of a function for parsing a single line from a certain db.
NBEdge * getEdge(NBNode *FromNode, NBNode *ToNode)
Returns the edge that connects both nodes.
double getFloat(const std::string &name) const
Returns the double-value of the named option (only for Option_Float)
void parse_VSysTypes()
Parses VSYS.
vehicle is a passenger car (a "normal" car)
bool hasIncoming(const NBEdge *const e) const
Returns whether the given edge ends at this node.
SVCPermissions getPermissions(const std::string &name, bool warn=false, SVCPermissions unknown=SVCAll)
parse permissions
void parse_Types()
Parses STRECKENTYP.
bool insert(NBDistrict *const district)
Adds a district to the dictionary.
void parse_Nodes()
Parses KNOTEN.
const PositionVector & getGeometry() const
Returns the geometry of the edge.
void parse_Lanes()
Parses FAHRSTREIFEN.
~NIImporter_VISUM()
destructor
const EdgeVector & getIncomingEdges() const
Returns this node's incoming edges (The edges which yield in this node)
NBNodeCont & getNodeCont()
Returns a reference to the node container.
bool hasMore() const
Returns whether another line may be read (the file was not read completely)
Instance responsible for building networks.
std::vector< NBEdge * > EdgeVector
container for (sorted) edges
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, which
NamedColumnsParser myLineParser
the parser to parse the information from the data lines
NBEdge * retrieve(const std::string &id, bool retrieveExtracted=false) const
Returns the edge that has the given id.
std::map< long long int, NBDistrict * > myShapeDistrictMap
A map from district shape definition name to the district.
A storage for options typed value containers)
bool insert(const std::string &id, const Position &position, NBDistrict *district=0)
Inserts a node into the map.
NBNode * buildDistrictNode(const std::string &id, NBNode *dest, bool isSource)
Builds a node for the given district and returns it.
std::string name
The name of the db.
NBTrafficLightLogicCont & getTLLogicCont()
Returns a reference to the traffic light logics container.
LaneSpreadFunction
Numbers representing special SUMO-XML-attribute values Information how the edge's lateral offset shal...
Intermediate class for storing visum traffic lights during their import.
NBConnectionVector & connections()
Returns the connections vector.
void reinit()
Reinitialises the reading (of the previous file)
Represents a single node (junction) during network building.
bool getWeightedBool(const std::string &name)
tries to get a bool which is possibly assigned to a certain modality
void setPos(unsigned long pos)
Sets the current position within the file to the given value.
void parse_Edges()
Parses STRECKE/STRECKEN.
NBNetBuilder & myNetBuilder
The network builder to fill with loaded values.
void addGeometryPoint(int index, const Position &p)
Adds a further geometry point.
void insert(const std::string &id, int numLanes, double maxSpeed, int prio, SVCPermissions permissions, double width, bool oneWayIsDefault, double sidewalkWidth, double bikeLaneWidth, double widthResolution, double maxWidth, double minWidth)
Adds a type into the list.
NBNode * getFromNode() const
Returns the origin node of the edge.
bool hasString(const std::string &str) const
#define PROGRESS_DONE_MESSAGE()
ParsingFunction function
Pointer to the function used for parsing.
const Position & getPosition() const
Returns the position of this district's center.
bool checkNodes(NBNode *from, NBNode *to)
Returns whether both nodes are a valid combination of from/to-nodes.
void setLaneSpreadFunction(LaneSpreadFunction spread)
(Re)sets how the lanes lateral offset shall be computed
#define WRITE_MESSAGE(msg)
NBEdge * getNamedEdge(const std::string &fieldName)
Tries to get the edge which name is stored in the given field.
NBDistrictCont & getDistrictCont()
Returns a reference the districts container.
Position positionAtOffset(double pos, double lateralOffset=0) const
Returns the position at the given length.
void parseLine(const std::string &line)
Parses the contents of the line.
static StringBijection< VISUM_KEY > KEYS
link directions
NBCapacity2Lanes myCapacity2Lanes
The converter to compute the lane number of edges from their capacity.
NBNode * getToNode() const
Returns the destination node of the edge.
SVCPermissions getPermissions(const std::string &type) const
Returns allowed vehicle classes for the given type.
void parse_LanesConnections()
Parses FAHRSTREIFENABBIEGER.
NBNode * getNamedNodeSecure(const std::string &fieldName, NBNode *fallback=0)