26
26
#include < unordered_set>
27
27
#include < vector>
28
28
29
- using lanelet::utils::getId;
30
- using lanelet::utils::to2D;
31
-
32
- bool loadLaneletMap (
29
+ bool load_lanelet_map (
33
30
const std::string & llt_map_path, lanelet::LaneletMapPtr & lanelet_map_ptr,
34
31
lanelet::Projector & projector)
35
32
{
@@ -47,21 +44,17 @@ bool loadLaneletMap(
47
44
return true ;
48
45
}
49
46
50
- bool exists (std::unordered_set<lanelet::Id> & set, lanelet::Id element)
51
- {
52
- return set.find (element) != set.end ();
53
- }
54
-
55
- lanelet::LineStrings3d convertLineLayerToLineStrings (lanelet::LaneletMapPtr & lanelet_map_ptr)
47
+ lanelet::LineStrings3d convert_line_layer_to_line_strings (
48
+ const lanelet::LaneletMapPtr & lanelet_map_ptr)
56
49
{
57
50
lanelet::LineStrings3d lines;
58
- for ( const lanelet::LineString3d & line : lanelet_map_ptr-> lineStringLayer ) {
59
- lines. push_back (line);
60
- }
51
+ std::copy (
52
+ lanelet_map_ptr-> lineStringLayer . begin (), lanelet_map_ptr-> lineStringLayer . end (),
53
+ std::back_inserter (lines));
61
54
return lines;
62
55
}
63
56
64
- lanelet::ConstPoint3d get3DPointFrom2DArcLength (
57
+ lanelet::ConstPoint3d get3d_point_from2d_arc_length (
65
58
const lanelet::ConstLineString3d & line, const double s)
66
59
{
67
60
double accumulated_distance2d = 0 ;
@@ -71,27 +64,23 @@ lanelet::ConstPoint3d get3DPointFrom2DArcLength(
71
64
auto prev_pt = line.front ();
72
65
for (size_t i = 1 ; i < line.size (); i++) {
73
66
const auto & pt = line[i];
74
- double distance2d = lanelet::geometry::distance2d (to2D (prev_pt), to2D (pt));
67
+ double distance2d =
68
+ lanelet::geometry::distance2d (lanelet::utils::to2D (prev_pt), lanelet::utils::to2D (pt));
75
69
if (accumulated_distance2d + distance2d >= s) {
76
70
double ratio = (s - accumulated_distance2d) / distance2d;
77
71
auto interpolated_pt = prev_pt.basicPoint () * (1 - ratio) + pt.basicPoint () * ratio;
78
72
std::cout << interpolated_pt << std::endl;
79
- return lanelet::ConstPoint3d (
80
- lanelet::utils::getId (), interpolated_pt.x (), interpolated_pt.y (), interpolated_pt.z ()) ;
73
+ return lanelet::ConstPoint3d{
74
+ lanelet::utils::getId (), interpolated_pt.x (), interpolated_pt.y (), interpolated_pt.z ()} ;
81
75
}
82
76
accumulated_distance2d += distance2d;
83
77
prev_pt = pt;
84
78
}
85
79
RCLCPP_ERROR (rclcpp::get_logger (" merge_close_lines" ), " interpolation failed" );
86
- return lanelet::ConstPoint3d ();
87
- }
88
-
89
- double getLineLength (const lanelet::ConstLineString3d & line)
90
- {
91
- return boost::geometry::length (line.basicLineString ());
80
+ return {};
92
81
}
93
82
94
- bool areLinesSame (
83
+ bool are_lines_same (
95
84
const lanelet::ConstLineString3d & line1, const lanelet::ConstLineString3d & line2)
96
85
{
97
86
bool same_ends = false ;
@@ -105,66 +94,63 @@ bool areLinesSame(
105
94
return false ;
106
95
}
107
96
108
- double sum_distance = 0 ;
109
- for (const auto & pt : line1) {
110
- sum_distance += boost::geometry::distance (pt.basicPoint (), line2);
111
- }
112
- for (const auto & pt : line2) {
113
- sum_distance += boost::geometry::distance (pt.basicPoint (), line1);
114
- }
97
+ double sum_distance =
98
+ std::accumulate (line1.begin (), line1.end (), 0.0 , [&line2](double sum, const auto & pt) {
99
+ return sum + boost::geometry::distance (pt.basicPoint (), line2);
100
+ });
101
+ sum_distance +=
102
+ std::accumulate (line2.begin (), line2.end (), 0.0 , [&line1](double sum, const auto & pt) {
103
+ return sum + boost::geometry::distance (pt.basicPoint (), line1);
104
+ });
115
105
116
- double avg_distance = sum_distance / (line1.size () + line2.size ());
106
+ double avg_distance = sum_distance / static_cast < double > (line1.size () + line2.size ());
117
107
std::cout << line1 << " " << line2 << " " << avg_distance << std::endl;
118
- if (avg_distance < 1.0 ) {
119
- return true ;
120
- } else {
121
- return false ;
122
- }
108
+ return avg_distance < 1.0 ;
123
109
}
124
110
125
- lanelet::BasicPoint3d getClosestPointOnLine (
111
+ lanelet::BasicPoint3d get_closest_point_on_line (
126
112
const lanelet::BasicPoint3d & search_point, const lanelet::ConstLineString3d & line)
127
113
{
128
- auto arc_coordinate = lanelet::geometry::toArcCoordinates (to2D (line), to2D (search_point));
114
+ auto arc_coordinate = lanelet::geometry::toArcCoordinates (
115
+ lanelet::utils::to2D (line), lanelet::utils::to2D (search_point));
129
116
std::cout << arc_coordinate.length << " " << arc_coordinate.distance << std::endl;
130
- return get3DPointFrom2DArcLength (line, arc_coordinate.length ).basicPoint ();
117
+ return get3d_point_from2d_arc_length (line, arc_coordinate.length ).basicPoint ();
131
118
}
132
119
133
- lanelet::LineString3d mergeTwoLines (
120
+ lanelet::LineString3d merge_two_lines (
134
121
const lanelet::LineString3d & line1, const lanelet::ConstLineString3d & line2)
135
122
{
136
123
lanelet::Points3d new_points;
137
124
for (const auto & p1 : line1) {
138
- lanelet::BasicPoint3d p1_basic_point = p1.basicPoint ();
139
- lanelet::BasicPoint3d p2_basic_point = getClosestPointOnLine (p1, line2);
125
+ const lanelet::BasicPoint3d & p1_basic_point = p1.basicPoint ();
126
+ lanelet::BasicPoint3d p2_basic_point = get_closest_point_on_line (p1, line2);
140
127
lanelet::BasicPoint3d new_basic_point = (p1_basic_point + p2_basic_point) / 2 ;
141
128
lanelet::Point3d new_point (lanelet::utils::getId (), new_basic_point);
142
129
new_points.push_back (new_point);
143
130
}
144
- return lanelet::LineString3d ( lanelet::utils::getId (), new_points) ;
131
+ return lanelet::LineString3d{ lanelet::utils::getId (), new_points} ;
145
132
}
146
133
147
- void copyData (lanelet::LineString3d & dst, lanelet::LineString3d & src)
134
+ void copy_data (lanelet::LineString3d & dst, const lanelet::LineString3d & src)
148
135
{
149
- lanelet::Points3d points;
150
136
dst.clear ();
151
- for (lanelet::Point3d & pt : src) {
152
- dst.push_back (pt );
137
+ for (const lanelet::ConstPoint3d & pt : src) {
138
+ dst.push_back (static_cast <lanelet::Point3d>(pt) );
153
139
}
154
140
}
155
141
156
- void mergeLines (lanelet::LaneletMapPtr & lanelet_map_ptr)
142
+ void merge_lines (lanelet::LaneletMapPtr & lanelet_map_ptr)
157
143
{
158
- auto lines = convertLineLayerToLineStrings (lanelet_map_ptr);
144
+ auto lines = convert_line_layer_to_line_strings (lanelet_map_ptr);
159
145
160
146
for (size_t i = 0 ; i < lines.size (); i++) {
161
147
auto line_i = lines.at (i);
162
148
for (size_t j = 0 ; j < i; j++) {
163
149
auto line_j = lines.at (j);
164
- if (areLinesSame (line_i, line_j)) {
165
- auto merged_line = mergeTwoLines (line_i, line_j);
166
- copyData (line_i, merged_line);
167
- copyData (line_j, merged_line);
150
+ if (are_lines_same (line_i, line_j)) {
151
+ auto merged_line = merge_two_lines (line_i, line_j);
152
+ copy_data (line_i, merged_line);
153
+ copy_data (line_j, merged_line);
168
154
line_i.setId (line_j.id ());
169
155
std::cout << line_j << " " << line_i << std::endl;
170
156
// lanelet_map_ptr->add(merged_line);
@@ -189,11 +175,11 @@ int main(int argc, char * argv[])
189
175
lanelet::LaneletMapPtr llt_map_ptr (new lanelet::LaneletMap);
190
176
lanelet::projection::MGRSProjector projector;
191
177
192
- if (!loadLaneletMap (llt_map_path, llt_map_ptr, projector)) {
178
+ if (!load_lanelet_map (llt_map_path, llt_map_ptr, projector)) {
193
179
return EXIT_FAILURE;
194
180
}
195
181
196
- mergeLines (llt_map_ptr);
182
+ merge_lines (llt_map_ptr);
197
183
lanelet::write (output_path, *llt_map_ptr, projector);
198
184
199
185
rclcpp::shutdown ();
0 commit comments