Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
eclipse
GitHub Repository: eclipse/sumo
Path: blob/main/src/netimport/vissim/tempstructs/NIVissimDistrictConnection.h
169684 views
1
/****************************************************************************/
2
// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3
// Copyright (C) 2001-2025 German Aerospace Center (DLR) and others.
4
// This program and the accompanying materials are made available under the
5
// terms of the Eclipse Public License 2.0 which is available at
6
// https://www.eclipse.org/legal/epl-2.0/
7
// This Source Code may also be made available under the following Secondary
8
// Licenses when the conditions for such availability set forth in the Eclipse
9
// Public License 2.0 are satisfied: GNU General Public License, version 2
10
// or later which is available at
11
// https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
12
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
13
/****************************************************************************/
14
/// @file NIVissimDistrictConnection.h
15
/// @author Daniel Krajzewicz
16
/// @author Michael Behrisch
17
/// @date End of 2002
18
///
19
// An edge imported from Vissim together for a container for
20
/****************************************************************************/
21
#pragma once
22
#include <config.h>
23
24
#include <map>
25
#include <string>
26
#include <utils/geom/Position.h>
27
28
29
class NBDistrictCont;
30
class NBEdgeCont;
31
32
33
// ===========================================================================
34
// class definitions
35
// ===========================================================================
36
class NIVissimDistrictConnection {
37
public:
38
/// Contructor
39
NIVissimDistrictConnection(int id, const std::string& name,
40
const std::vector<int>& districts, const std::vector<double>& percentages,
41
int edgeid, double position,
42
const std::vector<std::pair<int, int> >& assignedVehicles);
43
44
// Destructor
45
~NIVissimDistrictConnection();
46
47
/** @brief Returns the position
48
The position yields from the edge geometry and the place the connection is plaed at */
49
Position geomPosition() const;
50
51
/// Returns the id of the connection
52
int getID() const {
53
return myID;
54
}
55
56
/// Returns the position of the connection at the edge
57
double getPosition() const {
58
return myPosition;
59
}
60
61
double getMeanSpeed() const;
62
63
public:
64
/// Inserts the connection into the dictionary after building it
65
static bool dictionary(int id, const std::string& name,
66
const std::vector<int>& districts, const std::vector<double>& percentages,
67
int edgeid, double position,
68
const std::vector<std::pair<int, int> >& assignedVehicles);
69
70
/// Inserts the build connection to the dictionary
71
static bool dictionary(int id, NIVissimDistrictConnection* o);
72
73
/// Returns the named dictionary
74
static NIVissimDistrictConnection* dictionary(int id);
75
76
/// Builds the nodes that belong to a district
77
static void dict_BuildDistrictNodes(NBDistrictCont& dc,
78
NBNodeCont& nc);
79
80
/// Builds the districts
81
static void dict_BuildDistricts(NBDistrictCont& dc,
82
NBEdgeCont& ec, NBNodeCont& nc);
83
84
/** @brief Returns the connection to a district placed at the given node
85
Yep, there onyl should be one, there is no need to build a single edge as connection between two parking places */
86
static NIVissimDistrictConnection* dict_findForEdge(int edgeid);
87
88
/// Clears the dictionary
89
static void clearDict();
90
91
static void dict_BuildDistrictConnections();
92
93
static void dict_CheckEdgeEnds();
94
95
96
private:
97
void checkEdgeEnd();
98
double getRealSpeed(int distNo) const;
99
100
private:
101
/// The id of the connections
102
int myID;
103
104
/// The name of the connections
105
std::string myName;
106
107
/// The connected districts
108
std::vector<int> myDistricts;
109
110
/// Definition of a map of how many vehicles should leave to a certain district
111
typedef std::map<int, double> DistrictPercentages;
112
113
/// A map how many vehicles (key, amount) should leave to a district (key)
114
DistrictPercentages myPercentages;
115
116
/// The id of the connected edge
117
int myEdgeID;
118
119
/// The position on the edge
120
double myPosition;
121
122
/// The vehicles using this connection
123
std::vector<std::pair<int, int> > myAssignedVehicles;
124
125
private:
126
/// Definition of a dictionary of district connections
127
typedef std::map<int, NIVissimDistrictConnection*> DictType;
128
129
/// District connection dictionary
130
static DictType myDict;
131
132
/// Map from ditricts to connections
133
static std::map<int, std::vector<int> > myDistrictsConnections;
134
135
};
136
137