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