his_location.h 2.3 KB

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