56 #ifdef CHECK_MEMORY_LEAKS 58 #endif // CHECK_MEMORY_LEAKS 72 const std::string& name,
73 const std::vector<int>& districts,
const std::vector<SUMOReal>& percentages,
75 const std::vector<std::pair<int, int> >& assignedVehicles)
76 : myID(id), myName(name), myDistricts(districts),
77 myEdgeID(edgeid), myPosition(position),
78 myAssignedVehicles(assignedVehicles) {
80 std::vector<SUMOReal>::const_iterator j = percentages.begin();
95 const std::vector<int>& districts,
const std::vector<SUMOReal>& percentages,
97 const std::vector<std::pair<int, int> >& assignedVehicles) {
100 edgeid, position, assignedVehicles);
111 DictType::iterator i =
myDict.find(
id);
122 DictType::iterator i =
myDict.find(
id);
132 for (DictType::iterator i =
myDict.begin(); i !=
myDict.end(); i++) {
134 const std::vector<int>& districts = c->
myDistricts;
135 for (std::vector<int>::const_iterator j = districts.begin(); j != districts.end(); j++) {
146 const std::vector<int>& connections = (*k).second;
147 for (std::vector<int>::const_iterator j = connections.begin(); j != connections.end(); j++) {
168 const std::vector<int>& connections = (*k).second;
170 std::string dsid = toString<int>((*k).first);
175 for (std::vector<int>::const_iterator j = connections.begin(); j != connections.end(); j++) {
180 if (connections.size() == 1) {
181 distCenter.
add(10, 10);
183 district->setCenter(distCenter);
185 std::string
id =
"District" + district->getID();
187 new NBNode(
id, district->getPosition(), district);
188 if (!nc.
insert(districtNode)) {
205 const std::vector<int>& connections = (*k).second;
208 dc.
retrieve(toString<int>((*k).first));
210 assert(district != 0 && districtNode != 0);
212 for (std::vector<int>::const_iterator l = connections.begin(); l != connections.end(); l++) {
220 WRITE_WARNING(
"Could not build district '" + toString<int>((*k).first) +
"' - edge '" + toString<int>(c->
myEdgeID) +
"' is missing.");
223 std::string
id =
"ParkingPlace" + toString<int>(*l);
225 if (parkingPlace == 0) {
227 if (pos < e->getLength() - pos) {
242 id =
"VissimFromParkingplace" + toString<int>((*k).first) +
"-" + toString<int>(c->
myID);
244 new NBEdge(
id, districtNode, parkingPlace,
252 if (!district->
addSource(source, percNormed)) {
259 id =
"VissimToParkingplace" + toString<int>((*k).first) +
"-" + toString<int>(c->
myID);
261 new NBEdge(
id, parkingPlace, districtNode,
264 if (!ec.
insert(destination)) {
269 if (!district->
addSink(destination, percNormed2)) {
353 for (DictType::iterator i =
myDict.begin(); i !=
myDict.end(); i++) {
354 if ((*i).second->myEdgeID == edgeid) {
364 for (DictType::iterator i =
myDict.begin(); i !=
myDict.end(); i++) {
379 std::vector<std::pair<int, int> >::const_iterator i;
389 std::string
id = toString<int>(distNo);
392 WRITE_WARNING(
"The referenced speed distribution '" +
id +
"' is not known.");
398 if (speed < 0 || speed > 1000) {
static void dict_BuildDistricts(NBDistrictCont &dc, NBEdgeCont &ec, NBNodeCont &nc)
Builds the districts.
NBEdge * retrievePossiblySplit(const std::string &id, bool downstream) const
Tries to retrieve an edge, even if it is splitted.
static const SUMOReal UNSPECIFIED_WIDTH
unspecified lane width
static std::map< int, std::vector< int > > myDistrictsConnections
Map from ditricts to connections.
Position geomPosition() const
Returns the position The position yields from the edge geometry and the place the connection is plaed...
void add(const Position &pos)
Adds the given position to this one.
bool addSource(NBEdge *const source, SUMOReal weight)
Adds a source.
SUMOReal getRealSpeed(int distNo) const
The representation of a single edge during network building.
static bool dictionary(const std::string &type, const std::string &id, Distribution *d)
A container for districts.
void checkDistrictConnectionExistanceAt(SUMOReal pos)
SUMOReal getFloat(const std::string &name) const
Returns the SUMOReal-value of the named option (only for Option_Float)
static const SUMOReal UNSPECIFIED_OFFSET
unspecified lane offset
static NIVissimDistrictConnection * dict_findForEdge(int edgeid)
Returns the connection to a district placed at the given node Yep, there onyl should be one...
#define WRITE_WARNING(msg)
DistrictPercentages myPercentages
A map how many vehicles (key, amount) should leave to a district (key)
static OptionsCont & getOptions()
Retrieves the options.
A temporary storage for edges imported from Vissim.
static void dict_CheckEdgeEnds()
int myID
The id of the connections.
A class representing a single district.
const std::string & getID() const
Returns the id.
static void dict_BuildDistrictConnections()
std::vector< std::pair< int, int > > myAssignedVehicles
The vehicles using this connection.
void invalidateIncomingConnections()
int myEdgeID
The id of the connected edge.
bool insert(NBEdge *edge, bool ignorePrunning=false)
Adds an edge to the dictionary.
A point in 2D or 3D with translation and scaling methods.
std::vector< int > myDistricts
The connected districts.
void invalidateOutgoingConnections()
Position getGeomPosition(SUMOReal pos) const
Storage for edges, including some functionality operating on multiple edges.
static DictType myDict
District connection dictionary.
std::string toString(const T &t, std::streamsize accuracy=OUTPUT_ACCURACY)
SUMOReal getPosition() const
Returns the position of the connection at the edge.
static bool dictionary(int id, const std::string &name, const std::vector< int > &districts, const std::vector< SUMOReal > &percentages, int edgeid, SUMOReal position, const std::vector< std::pair< int, int > > &assignedVehicles)
Inserts the connection into the dictionary after building it.
bool insert(NBDistrict *const district)
Adds a district to the dictionary.
static void clearDict()
Clears the dictionary.
~NIVissimDistrictConnection()
NBNode * getToNode() const
Returns the destination node of the edge.
NBEdge * retrieve(const std::string &id, bool retrieveExtracted=false) const
Returns the edge that has the given id.
bool addSink(NBEdge *const sink, SUMOReal weight)
Adds a sink.
SUMOReal getMeanSpeed() const
bool insert(const std::string &id, const Position &position, NBDistrict *district=0)
Inserts a node into the map.
static bool dictionary(int id, const std::string &name, const std::string &type, int noLanes, SUMOReal zuschlag1, SUMOReal zuschlag2, SUMOReal length, const PositionVector &geom, const NIVissimClosedLanesVector &clv)
Adds the described item to the dictionary Builds the edge first.
Represents a single node (junction) during network building.
NBNode * retrieve(const std::string &id) const
Returns the node with the given name.
NIVissimDistrictConnection(int id, const std::string &name, const std::vector< int > &districts, const std::vector< SUMOReal > &percentages, int edgeid, SUMOReal position, const std::vector< std::pair< int, int > > &assignedVehicles)
Contructor.
Container for nodes during the netbuilding process.
Position getPolygonCenter() const
Returns the arithmetic of all corner points.
std::map< int, NIVissimDistrictConnection * > DictType
Definition of a dictionary of district connections.
SUMOReal myPosition
The position on the edge.
NBDistrict * retrieve(const std::string &id) const
Returns the districts with the given id.
static void dict_BuildDistrictNodes(NBDistrictCont &dc, NBNodeCont &nc)
Builds the nodes that belong to a district.
NBNode * getFromNode() const
Returns the origin node of the edge.