00001
00002
00003
00004 #ifndef CAJUN_SPATIAL_TO_LANE_MAP_H
00005 #define CAJUN_SPATIAL_TO_LANE_MAP_H
00006
00007 #include "lane_grid.H"
00008
00009 #include "data_type.H"
00010 #include "rndf.H"
00011
00012 namespace cajun
00013 {
00014 class spatial_to_lane_map_t
00015 {
00016 lane_grid_t m_lane_grid;
00017 rndf_t const *m_rndf;
00018 double m_cell_size;
00019
00020 public:
00021 spatial_to_lane_map_t (rndf_t const *rndf_, double cell_size_):
00022 m_rndf (rndf_), m_cell_size (cell_size_)
00023 {
00024 }
00025
00026 void update_spatial_map (std::vector<rndf_lane_data_t> &rndf_list_);
00027
00028 bool neighboring_lanes (std::vector<rndf_t::lane_seg_t> &lanes_seg,
00029 double x_, double y_, double rad_);
00030
00031
00032 bool near_any_lane (double x_, double y_, double rad_);
00033
00034
00035
00036 void init () { printf ("SLM: init()\n");}
00037
00038 void init_tile (unsigned x, unsigned y)
00039 { printf ("SLM: init_tile %d %d\n", x, y);}
00040
00041 void fini_tile () { printf ("SLM: fini\n");};
00042
00043 void visit (unsigned x_, unsigned y_,
00044 lane_grid_t::iterator_t &iter_);
00045 private:
00046 void update_by_rndf_lane (rndf_lane_data_t &l_data_);
00047
00048 bool wp_id_exist (lane_grid_t::iterator_t &iter_,
00049 rndf_t::waypoint_id_t const &wp_id_1_,
00050 rndf_t::waypoint_id_t const &wp_id_2_);
00051
00052 void add_wp_ids (lane_grid_t::iterator_t &iter_,
00053 rndf_t::waypoint_id_t const &wp_id_1_,
00054 rndf_t::waypoint_id_t const &wp_id_2_);
00055
00056 void print_grid ();
00057
00058 void print_lane_list (
00059 std::vector<rndf_t::lane_seg_t> const &lane_list_);
00060
00061 void get_lanes_from_cell (lane_grid_t::iterator_t &iter,
00062 std::vector<rndf_t::lane_seg_t> &lane_seg);
00063
00064 bool lane_seg_in_list (
00065 std::vector<rndf_t::lane_seg_t> const &lane_list_,
00066 rndf_t::lane_seg_t const &lane_seg_);
00067 };
00068 };
00069
00070
00071 #endif