his_location.h 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  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. // 计算当前点是否需要记录到DB中
  57. void push(uint64_t timestamp,const point & p,int32_t areaid,int32_t mapid,int32_t siteid,bool bclose = false);
  58. void insert();
  59. void insert(uint64_t timestamp, const point & p, int32_t areaid, int32_t mapid, int32_t siteid, double scale);
  60. void update(const point &p,uint64_t timestamp,int flag=0,int dflag=0);
  61. // 操作路径上点的集合
  62. std::vector<point> find_path(const point &p1,const point &p2);
  63. //virtual bool handle_message(const point &p,uint64_t timestamp)=0;
  64. bool handle_message(const point &p,uint64_t timestamp);
  65. // 处理获取到点的集合,在路径上
  66. bool handle_path(std::vector<point> &rc,uint64_t timestamp,bool flag);
  67. };
  68. #endif