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()
invalidate incoming connections
int myEdgeID
The id of the connected edge.
bool insert(NBEdge *edge, bool ignorePrunning=false)
Adds an edge to the dictionary.
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
A point in 2D or 3D with translation and scaling methods.
std::vector< int > myDistricts
The connected districts.
void invalidateOutgoingConnections()
invalidate outgoing connections
Position getGeomPosition(SUMOReal pos) const
Storage for edges, including some functionality operating on multiple edges.
static DictType myDict
District connection dictionary.
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.