|
@@ -71,10 +71,10 @@ struct location_card
|
|
|
if(!is_valid())
|
|
|
return false;
|
|
|
point p=m_d.back().p;
|
|
|
- if(p==pt)p=m_p;
|
|
|
+ if(p==pt)return false;
|
|
|
double arg = make_arg(pt,p);
|
|
|
- log_info("his_location:line_changed:%d,%.2f,m_arg:%.2f",m_cardid,arg,m_arg);
|
|
|
- return arg != m_arg;
|
|
|
+ log_info("his_location:line_changed:%d,%f,m_arg:%f,%s,%f",m_cardid,arg,m_arg, (arg-m_arg > -1e-10 && arg-m_arg<1e-10)?"same":"not same",m_arg-arg);
|
|
|
+ return !point::eq(arg,m_arg,1e-10);
|
|
|
}
|
|
|
bool is_speed_changed(const point& pt,uint64_t time)
|
|
|
{
|
|
@@ -100,9 +100,9 @@ struct location_card
|
|
|
|
|
|
return flag;
|
|
|
}
|
|
|
- bool time_out(uint64_t time)
|
|
|
+ bool time_out(const point &p,uint64_t time)
|
|
|
{
|
|
|
- if(time-m_timestamp>=60*1000)
|
|
|
+ if(time-m_timestamp>=60*1000 && !(p == m_p))
|
|
|
return true;
|
|
|
return false;
|
|
|
}
|
|
@@ -151,7 +151,7 @@ struct location_card
|
|
|
bool flag=false;
|
|
|
bool iflag=false;
|
|
|
flag=handle_message(p,timestamp);
|
|
|
- if(time_out(timestamp))
|
|
|
+ if(time_out(p,timestamp))
|
|
|
if(!flag)iflag=true;
|
|
|
if(is_speed_changed(p,timestamp))
|
|
|
if(!flag)iflag=true;
|
|
@@ -162,8 +162,9 @@ struct location_card
|
|
|
if(iflag)
|
|
|
{
|
|
|
update(p,timestamp);
|
|
|
- set_invalid();
|
|
|
+ //set_invalid();
|
|
|
set(p,timestamp);
|
|
|
+ insert();
|
|
|
}
|
|
|
}
|
|
|
virtual std::string getTabName()=0;
|
|
@@ -207,40 +208,50 @@ struct location_staff:location_card
|
|
|
flag=true;
|
|
|
if(timestamp-m_timestamp>120*1000)
|
|
|
{
|
|
|
+ log_info("his_location:line_changed_timeout %d",m_cardid);
|
|
|
update(m_d.back().p,m_d.back().time);
|
|
|
set(p,timestamp);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- std::vector<point> rc=card_path::inst().find_path(m_p,p);
|
|
|
+ log_info("his_location:line_changed_find_path %d,(%.2f,%.2f)-->(%.2f,%.2f)-->(%.2f,%.2f)",m_cardid,m_p.x,m_p.y,m_d.back().p.x,m_d.back().p.y,p.x,p.y);
|
|
|
+ std::vector<point> rc=card_path::inst().find_path(point(m_d.back().p.x,-m_d.back().p.y),point(p.x,-p.y));
|
|
|
if(rc.empty())
|
|
|
{
|
|
|
+ log_info("his_location:line_changed rc.empty() %d",m_cardid);
|
|
|
update(m_d.back().p,m_d.back().time);
|
|
|
set(m_d.back().p,m_d.back().time);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
+ for(uint32_t i=0;i<rc.size();i++)
|
|
|
+ log_info("his_location:find_path..x=%.3lf,y=%.3lf\n",rc[i].x,rc[i].y);
|
|
|
if(rc.size()==1)
|
|
|
{
|
|
|
log_info("his_location:line_changed %d circle point(%.2f,%.2f)",m_cardid,rc[0].x,rc[0].y);
|
|
|
- update(rc[0],m_d.back().time);
|
|
|
- set(rc[0],m_d.back().time);
|
|
|
+ point tmp(rc[0].x,-rc[0].y);
|
|
|
+ update(tmp,m_d.back().time);
|
|
|
+ set(tmp,m_d.back().time);
|
|
|
}
|
|
|
else if(rc.size()==2)
|
|
|
{
|
|
|
- update(rc[0],m_d.back().time);
|
|
|
- set(rc[0],m_d.back().time);
|
|
|
+ point tmp(rc[0].x,-rc[0].y);
|
|
|
+ update(tmp,m_d.back().time);
|
|
|
+ set(tmp,m_d.back().time);
|
|
|
//
|
|
|
- m_arg=make_arg(rc[1],m_p);
|
|
|
+ tmp.set(rc[1].x,-rc[1].y);
|
|
|
+ m_arg=make_arg(tmp,m_p);
|
|
|
insert();
|
|
|
//
|
|
|
- update(rc[1],timestamp);
|
|
|
- set(rc[1],timestamp);
|
|
|
+ update(tmp,timestamp);
|
|
|
+ set(tmp,timestamp);
|
|
|
}
|
|
|
else//更多的拐点
|
|
|
{
|
|
|
- update(rc[0],m_d.back().time);
|
|
|
- set(rc[1],timestamp);
|
|
|
+ point tmp(rc[0].x,-rc[0].y);
|
|
|
+ update(tmp,m_d.back().time);
|
|
|
+ tmp.set(rc.back().x,-rc.back().y);
|
|
|
+ set(tmp,timestamp);
|
|
|
}
|
|
|
}
|
|
|
}
|