MCPcopy Create free account
hub / github.com/PJLab-ADG/OASim / RoadGraph

Class RoadGraph

limsim/utils/roadgraph.py:166–212  ·  view source on GitHub ↗

Road graph of the map

Source from the content-addressed store, hash-verified

164
165@dataclass
166class RoadGraph:
167 """
168 Road graph of the map
169 """
170
171 edges: Dict[str, Edge] = field(default_factory=dict)
172 lanes: Dict[str, AbstractLane] = field(default_factory=dict)
173 junction_lanes: Dict[str, JunctionLane] = field(default_factory=dict)
174
175 def get_lane_by_id(self, lane_id: str) -> AbstractLane:
176 if lane_id in self.lanes:
177 return self.lanes[lane_id]
178 elif lane_id in self.junction_lanes:
179 return self.junction_lanes[lane_id]
180 else:
181 logging.debug(f"cannot find lane {lane_id}")
182 return None
183
184 def get_next_lane(self, lane_id: str) -> AbstractLane:
185 lane = self.get_lane_by_id(lane_id)
186 if isinstance(lane, NormalLane):
187 next_lanes = list(lane.next_lanes.values())
188 if len(next_lanes) > 0:
189 # first_next_lane = list(lane.next_lanes.values())[0][0]
190 return self.get_lane_by_id(next_lanes[0][0])
191 else:
192 return None
193 elif isinstance(lane, JunctionLane):
194 return self.get_lane_by_id(lane.next_lane_id)
195 return None
196
197 def get_available_next_lane(self, lane_id: str, available_lanes: list[str]) -> AbstractLane:
198 lane = self.get_lane_by_id(lane_id)
199 if isinstance(lane, NormalLane):
200 for next_lane_i in lane.next_lanes.values():
201 if next_lane_i[0] in available_lanes:
202 return self.get_lane_by_id(next_lane_i[0])
203 elif isinstance(lane, JunctionLane):
204 if lane.next_lane_id in available_lanes:
205 return self.get_lane_by_id(lane.next_lane_id)
206 return None
207
208 def __str__(self):
209 return 'edges: {}, \nlanes: {}, \njunctions lanes: {}'.format(
210 self.edges.keys(), self.lanes.keys(),
211 self.junction_lanes.keys()
212 )
213
214
215if __name__ == "__main__":

Callers 4

exportSceneMethod · 0.90
exportSceneMethod · 0.90
exportSceneMethod · 0.90
exportSceneMethod · 0.90

Calls

no outgoing calls

Tested by

no test coverage detected