tunnel.h 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. //头文件保护
  2. #ifndef TUNNEL_H
  3. #define TUNNEL_H
  4. /**
  5. * 文件 tunnel.h
  6. * 简述 用于实现以格子为基础元素的巷道定位数据模型
  7. * 详细信息
  8. * 作者 曾敏果; 邮箱:57862207@qq.com
  9. * 日期 2022-7-14
  10. */
  11. #include <deque>
  12. #include <vector>
  13. #include <boost/serialization/singleton.hpp>
  14. #include "point.h"
  15. #include "line.h"
  16. #include "db/db_api/CDBSingletonDefine.h"
  17. #include "db/db_api/CDBResultSet.h"
  18. // 格子类,用于存储定位结果的基本单元
  19. class tunnel_cell
  20. {
  21. public:
  22. tunnel_cell(double x, double y, double z);
  23. ~tunnel_cell();
  24. //格子的实际坐标值,用于将格子转换成具体的坐标进行显示
  25. double x;
  26. double y;
  27. double z;
  28. protected:
  29. private:
  30. //所属基站号,不在任何基站覆盖范围内,id为-1
  31. //int reader_id;
  32. //距基站的距离,靠近井口方向为正,靠近井底方向为负,若不在任何基站覆盖范围,此变量值无效
  33. //double dist;
  34. };
  35. //巷道类,将巷道分成一个一个的格子,用于存储巷道的格子集合。
  36. class tunnel
  37. {
  38. public:
  39. tunnel();
  40. ~tunnel();
  41. //初始化格子列表
  42. bool init_cells();
  43. //初始化巷道
  44. bool init_tunnel();
  45. //通过格子索引号获取格子的具体位置
  46. bool get_position_by_cell_index(int index, point& pos);
  47. //获取总格子数
  48. int get_cells_count();
  49. //通过坐标来获取其在的格子位置,用于将基站坐标映射到格子索引号
  50. int get_cell_index_by_position(const point& pos);
  51. protected:
  52. private:
  53. //从数据库中读取初始化格子用线段
  54. bool read_lines_from_db();
  55. //将线段队列转换成格子
  56. bool transform_lines_to_cells();
  57. // 格子队列 [7/14/2022 zengminguo]
  58. std::vector<tunnel_cell> m_vec_cells;
  59. //初始化巷道用的线段列表
  60. std::deque<line_v> m_queue_lines;
  61. };
  62. //巷道类单例定义
  63. typedef boost::serialization::singleton<tunnel> singleton_tunnel;
  64. #define s_tunnel singleton_tunnel::get_mutable_instance()
  65. #define s_tunnel_const singleton_tunnel::get_const_instance()
  66. #endif //#ifndef TUNNEL_H