DuplicatedPoints.cpp
Go to the documentation of this file.
2 
3 #include <lanelet2_core/primitives/Point.h>
4 
6 
7 namespace lanelet {
8 namespace validation {
9 namespace {
10 RegisterMapValidator<DuplicatedPointsChecker> reg;
11 
12 template <typename T>
13 Optional<Id> hasDuplicates(const T& elem) {
14  if (elem.size() < 2) {
15  return {};
16  }
17  for (auto itFirst = elem.begin(), itSecond = elem.begin() + 1; itSecond != elem.end(); ++itFirst, ++itSecond) {
18  if (*itFirst == *itSecond) {
19  return itFirst->id();
20  }
21  }
22  return {};
23 }
24 } // namespace
25 
27  Issues issues;
28  for (const auto& ls : map.lineStringLayer) {
29  auto duplicates = hasDuplicates(ls);
30  if (!!duplicates) {
31  issues.emplace_back(Severity::Error, Primitive::LineString, ls.id(),
32  "Linestring contains the point " + std::to_string(*duplicates) +
33  " multiple times in succession. This is not allowed!");
34  }
35  }
36  for (const auto& poly : map.polygonLayer) {
37  auto duplicates = hasDuplicates(poly);
38  if (!!duplicates) {
39  issues.emplace_back(Severity::Error, Primitive::Polygon, poly.id(),
40  "Polygon contains the point " + std::to_string(*duplicates) +
41  " multiple times in succession. This is not allowed!");
42  }
43  }
44  return issues;
45 }
46 } // namespace validation
47 } // namespace lanelet
lanelet::LaneletMapLayers::lineStringLayer
LineStringLayer lineStringLayer
lanelet
lanelet::validation::Primitive::LineString
@ LineString
lanelet::LaneletMapLayers::polygonLayer
PolygonLayer polygonLayer
lanelet::validation::DuplicatedPointsChecker::operator()
Issues operator()(const LaneletMap &map) override
Definition: DuplicatedPoints.cpp:26
lanelet::validation::Issues
std::vector< Issue > Issues
Definition: Issue.h:65
lanelet::LaneletMap
Optional
boost::optional< T > Optional
DuplicatedPoints.h
lanelet::validation::Severity::Error
@ Error
ValidatorFactory.h
lanelet::validation::Primitive::Polygon
@ Polygon


lanelet2_validation
Author(s): Fabian Poggenhans
autogenerated on Thu Mar 6 2025 03:26:17