Skip to content

Commit 385f95b

Browse files
committed
parse road's rule attribute (driving direction) #74
1 parent 0774efd commit 385f95b

File tree

3 files changed

+9
-4
lines changed

3 files changed

+9
-4
lines changed

include/Road.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ struct SpeedRecord : public XmlNode
7979
class Road : public XmlNode
8080
{
8181
public:
82-
Road(std::string id, double length, std::string junction, std::string name);
82+
Road(std::string id, double length, std::string junction, std::string name, bool left_hand_traffic = false);
8383

8484
std::vector<LaneSection> get_lanesections() const;
8585
std::vector<RoadObject> get_road_objects() const;
@@ -114,6 +114,7 @@ class Road : public XmlNode
114114
std::string id = "";
115115
std::string junction = "";
116116
std::string name = "";
117+
bool left_hand_traffic = false;
117118

118119
RoadLink predecessor;
119120
RoadLink successor;

src/OpenDriveMap.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,13 +148,17 @@ OpenDriveMap::OpenDriveMap(const std::string& xodr_file,
148148
{
149149
/* make road */
150150
const std::string road_id = road_node.attribute("id").as_string("");
151+
std::string rule_str = std::string(road_node.attribute("rule").as_string("RHT"));
152+
std::transform(rule_str.begin(), rule_str.end(), rule_str.begin(), [](unsigned char c) { return std::tolower(c); });
153+
const bool is_left_hand_traffic = (rule_str == "lht");
151154

152155
Road& road = this->id_to_road
153156
.insert({road_id,
154157
Road(road_id,
155158
road_node.attribute("length").as_double(0.0),
156159
road_node.attribute("junction").as_string(""),
157-
road_node.attribute("name").as_string(""))})
160+
road_node.attribute("name").as_string(""),
161+
is_left_hand_traffic)})
158162
.first->second;
159163
road.xml_node = road_node;
160164

src/Road.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,8 @@ std::vector<RoadObject> Road::get_road_objects() const { return get_map_values(t
5555

5656
std::vector<Signal> Road::get_signals() const { return get_map_values(this->id_to_signal); }
5757

58-
Road::Road(std::string id, double length, std::string junction, std::string name) :
59-
length(length), id(id), junction(junction), name(name), ref_line(id, length)
58+
Road::Road(std::string id, double length, std::string junction, std::string name, bool left_hand_traffic) :
59+
length(length), id(id), junction(junction), name(name), left_hand_traffic(left_hand_traffic), ref_line(id, length)
6060
{
6161
}
6262

0 commit comments

Comments
 (0)