From 5ace694ee6ed12ee978693a723d88b8779e85038 Mon Sep 17 00:00:00 2001
From: Sergi Hernandez Juan <shernand@iri.upc.edu>
Date: Wed, 31 May 2023 16:24:17 +0200
Subject: [PATCH] Added support to generate all the geometries of the imported
 map.

---
 include/osm/osm_map.h |  1 +
 src/osm/osm_map.cpp   | 18 +++++++++++++++++-
 2 files changed, 18 insertions(+), 1 deletion(-)

diff --git a/include/osm/osm_map.h b/include/osm/osm_map.h
index f563969..7705779 100644
--- a/include/osm/osm_map.h
+++ b/include/osm/osm_map.h
@@ -30,6 +30,7 @@ class COSMMap : public osmium::handler::Handler
     void process_map(void);
     void create_junctions(void);
     void create_road_segments(void);
+    void generate_geometries(void);
     void delete_way(COSMWay *way);
     void add_way(COSMWay *way);
     COSMWay *get_way_by_id(long int id);
diff --git a/src/osm/osm_map.cpp b/src/osm/osm_map.cpp
index 46b86bd..16f3373 100644
--- a/src/osm/osm_map.cpp
+++ b/src/osm/osm_map.cpp
@@ -118,11 +118,18 @@ void COSMMap::create_road_segments(void)
   for(unsigned int i=0;i<this->ways.size();i++)
   {
     new_segment=new COSMRoadSegment(this->ways[i]);
-    new_segment->generate_geometry();
     this->segments.push_back(new_segment);
   }
 }
 
+void COSMMap::generate_geometries(void)
+{
+  for(unsigned int i=0;i<this->segments.size();i++)
+    this->segments[i]->generate_geometry();
+  for(unsigned int i=0;i<this->junctions.size();i++)
+    this->junctions[i]->generate_geometry();
+}
+
 void COSMMap::delete_way(COSMWay *way)
 {
   std::vector<COSMWay *>::iterator it;
@@ -266,6 +273,7 @@ void COSMMap::load(const std::string &filename)
   this->process_map();
   this->create_road_segments();
   this->create_junctions();
+  this->generate_geometries();
 }
 
 void COSMMap::node(const osmium::Node& node)
@@ -336,6 +344,14 @@ void COSMMap::get_paths(std::vector<double> &x, std::vector<double> &y, std::vec
     heading.insert(heading.end(),new_heading.begin(),new_heading.end());
     curvature.insert(curvature.end(),new_curvature.begin(),new_curvature.end());
   }
+  for(unsigned int i=0;i<this->junctions.size();i++)
+  {
+    this->junctions[i]->get_trajectory(new_x,new_y,new_heading,new_curvature);
+    x.insert(x.end(),new_x.begin(),new_x.end());
+    y.insert(y.end(),new_y.begin(),new_y.end());
+    heading.insert(heading.end(),new_heading.begin(),new_heading.end());
+    curvature.insert(curvature.end(),new_curvature.begin(),new_curvature.end());
+  }
 }
 
 std::ostream& operator<<(std::ostream& out, COSMMap &map)
-- 
GitLab