his_location.h 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. #ifndef __INCLUDE_HIS_LOCATION_HPP
  2. #define __INCLUDE_HIS_LOCATION_HPP
  3. #include <complex>
  4. #include <queue>
  5. #include "point.h"
  6. #include "websocket/ws_common.h"
  7. //速度
  8. //区域 地图变换
  9. //运动方向
  10. //路径变换
  11. struct location_card
  12. {
  13. location_card(uint32_t id,uint64_t type,uint32_t objid);
  14. uint32_t m_cardid; //卡id
  15. uint16_t m_type; //卡类型
  16. uint32_t m_objid;
  17. double m_arg; //运动方向角度值
  18. int m_areaid; //区域
  19. int m_mapid; //地图
  20. int m_siteid; //分站
  21. uint64_t m_timestamp; //入库后的时间
  22. point m_p; //入库后的点
  23. int m_direct_index;
  24. uint64_t last_timestamp;
  25. bool m_isInsert ; //是否
  26. static uint32_t m_difftime;//进入盲区得时长限制 时长
  27. static int m_distance; //进入盲区后,第一个点与之前得距离 像素距离
  28. void set_cid(uint32_t cid){ m_objid=cid; }
  29. struct mini_data
  30. {
  31. mini_data(const point &p,uint64_t t)
  32. :p(p)
  33. ,time(t)
  34. {}
  35. point p;
  36. uint64_t time;
  37. };
  38. std::queue<mini_data> m_d;
  39. void init();
  40. void init_att(const point &pt,uint64_t time);
  41. void set_invalid();
  42. //当前m_arg运动方向角度值 是否有效 0x12345678无效
  43. bool is_valid();
  44. //计算运动方向角度值
  45. double make_arg(const point &pt,const point &p);
  46. void set(const point &pt,uint64_t time);
  47. // 是否在路径上改变方向
  48. bool line_changed(const point &pt);//,int &df)
  49. // 判断速度变化
  50. bool is_speed_changed(const point& pt,uint64_t time);
  51. // 超时
  52. bool time_out(const point &p,uint64_t time);
  53. // 区域变化
  54. bool is_area_changed(int new_areaid);
  55. // 地图变化
  56. bool is_map_changed(int new_mapid);
  57. // 计算当前点是否需要记录到DB中
  58. void push(uint64_t timestamp,const point & p,int32_t areaid,int32_t mapid,int32_t siteid,bool bclose = false);
  59. void insert();
  60. void insert(uint64_t timestamp, const point & p, int32_t areaid, int32_t mapid, int32_t siteid, double scale);
  61. void insert_cell_card_tdoa(const sys::tdoa_2d_data& pt, uint64_t timestamp);
  62. void update(const point &p, uint64_t timestamp, int flag = 0, int dflag = 0);
  63. // 操作路径上点的集合
  64. std::vector<point> find_path(const point &p1,const point &p2);
  65. //virtual bool handle_message(const point &p,uint64_t timestamp)=0;
  66. bool handle_message(const point &p,uint64_t timestamp);
  67. // 处理获取到点的集合,在路径上
  68. bool handle_path(std::vector<point> &rc,uint64_t timestamp,bool flag);
  69. };
  70. #endif