From: <te...@us...> - 2011-02-19 19:17:22
|
Revision: 4212 http://navit.svn.sourceforge.net/navit/?rev=4212&view=rev Author: tegzed Date: 2011-02-19 19:17:16 +0000 (Sat, 19 Feb 2011) Log Message: ----------- Fix:osd/core: use finer time resolution for acceleration calculation Modified Paths: -------------- trunk/navit/navit/osd/core/osd_core.c Modified: trunk/navit/navit/osd/core/osd_core.c =================================================================== --- trunk/navit/navit/osd/core/osd_core.c 2011-02-19 18:53:34 UTC (rev 4211) +++ trunk/navit/navit/osd/core/osd_core.c 2011-02-19 19:17:16 UTC (rev 4212) @@ -238,7 +238,7 @@ int time_all; time_t last_click_time; //time of last click (for double click handling) time_t last_start_time; //time of last start of counting - time_t last_update_time; //time of last position update + double last_update_time; //time of last position update struct coord last_coord; double last_speed; double acceleration; @@ -375,8 +375,12 @@ transform_from_geo(pro, position_attr.u.coord_geo, &curr_coord); if (this->last_coord.x != -1 ) { + struct timeval tv; + double curr_time; + gettimeofday(&tv,NULL); + curr_time = (double)(tv.tv_usec)/1000000.0+tv.tv_sec; //we have valid previous position - double dt = time(0)-this->last_update_time; + double dt = curr_time-this->last_update_time; double dCurrDist = 0; dCurrDist = transform_distance(pro, &curr_coord, &this->last_coord); if(0<curr_coord.x && 0<this->last_coord.x) { @@ -385,8 +389,6 @@ this->time_all = time(0)-this->last_click_time+this->sum_time; spd = 3.6*(double)this->sum_dist/(double)this->time_all; if(dt != 0) { - //suppose that gps data comes with the periodicity that is a multiple of 1 second - //maybe finer time resolution will be needed, for more correct operation if(vehicle_get_attr(curr_vehicle, attr_position_speed,&speed_attr, NULL)) { curr_spd = *speed_attr.u.numd; double dv = (curr_spd-this->last_speed)/3.6; //speed difference in m/sec @@ -394,7 +396,7 @@ if (curr_coord.x!=this->last_coord.x || curr_coord.y!=this->last_coord.y) { this->last_speed = curr_spd; - this->last_update_time = time(0); + this->last_update_time = curr_time; } } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |