Opened 9 years ago

Last modified 14 months ago

#417 new enhancement/feature request

Incorrect ETA and TR - new method required?

Reported by: tiiiim Owned by: KaZeR
Priority: major Milestone: version 0.6.0
Component: core Version: git master
Severity: normal Keywords:
Cc: fre.labrosse@…


I'm not sure how navit currently calculates the ETA and TR (time remaining) until the destination is reached (I presume it uses the road speeds configured in navit.xml), but the predictions are hopelessly optimistic.

Wouldn't it be better to use an average speed for the current session (i.e. current navigation session) and the DR (distance remaining) to calculate the approximate time remaining? Perhaps at the start of the session, when there isn't enough data to calculate a good average speed, the instantaneous speed could be used.

Perhaps a 'Reset session' button/option to reset the current average speed should then also be implemented...

Change History (7)

comment:1 Changed 9 years ago by kazer

  • Milestone set to want patch / contribution

Having a more accurate estimation could be useful indeed, but it doesn't have high priority for us currently. Patch welcome.

comment:2 Changed 8 years ago by brianjmurrell

I can think of two implementations that would yield quite accurate results. I've used this first one in other products and despite it's simplicity, it's quite accurate. Now of course, the E in ETA is for estimate and so we are only ever going to get at best an estimate. That said, the first implementation is simply "how fast do I drive"? I have found with using other products that base the ETA on the max. speed of the type of roads being driven to be quite inaccurate, because who drives the speed limit, afterall? :-)

So in this first implementation, you list the speed limits of the different types of roads known and then allow the user to specify the speed that he would typically drive. So for Canada I might have:

                                S P E E D
      Type of Road           Posted   Actual 
School zone:                 40KM/h   40KM/h
Suburban road:               50KM/h   65KM/h
Suburban main road:          60KM/h   80KM/h
Intercity undivided road:    80KM/h   100KM/h
Divided highway:            100KM/h   120KM/h

Very simple and in reality, quite accurate.

An extension of this method is rather than (or in addition to) have the user input conversion values, learn the user's driving speed for certain road types.

The other option/next step is to learn and accumulate data on different roads (actual road segments, not just road types) about the speed that is driveable (averages over many users' samples of course) at different times of day. This is not quite as good as having a live traffic feed, but should be even better than the above (speed limit conversion) option as it actually can be used to reroute around typical "rush hour" slowdown areas as these are learned over time.

This latter option of course requires a central data store and community input to aggregate the data from many drivers. This latter option is much more complicated than the previous "speed conversion" method.

As such, I would advocate implementing the first option first. I would think it should not be terribly difficult in fact, given somebody who knows the code.

comment:3 Changed 7 years ago by korrosa

The first option is actually possible already - use the speed attribute for each roadprofile within the vehicleprofile, specifying average speeds for each type of road in km/h. Mine is shown below, and is fairly accurate (for the UK), but not perfect. (Note that the speed attribute is only used for calculating ETA, and nothing else.)

	    <roadprofile item_types="living_street,street_service,track_gravelled,track_unpaved" speed="5" route_weight="30" maxspeed="50">
            	<announcement level="0" distance_metric="25"/>
            	<announcement level="1" distance_metric="100"/>
            	<announcement level="2" distance_metric="200"/>
		<!-- MINOR ROADS -->
            <roadprofile item_types="street_1_land" speed="40" route_weight="30" maxspeed="97">
            	<announcement level="0" distance_metric="100"/>
            	<announcement level="1" distance_metric="400"/>
            	<announcement level="2" distance_metric="1000"/>
	    <roadprofile item_types="street_0,street_1_city,track_paved,poly_street_1" speed="40" route_weight="70" maxspeed="97">
            	<announcement level="0" distance_metric="25"/>
            	<announcement level="1" distance_metric="100"/>
            	<announcement level="2" distance_metric="200"/>
            <roadprofile item_types="street_2_city,street_2_land" speed="40" route_weight="80" maxspeed="97">
            	<announcement level="0" distance_metric="50"/>
            	<announcement level="1" distance_metric="200"/>
            	<announcement level="2" distance_metric="500"/>
            <roadprofile item_types="street_3_city,street_3_land" speed="40" route_weight="100" maxspeed="97">
            	<announcement level="0" distance_metric="50"/>
            	<announcement level="1" distance_metric="200"/>
            	<announcement level="2" distance_metric="500"/>
		<!-- PRIMARY ROADS -->
            <roadprofile item_types="street_4_city,street_4_land" speed="40" route_weight="130" maxspeed="97">
            	<announcement level="0" distance_metric="50"/>
            	<announcement level="1" distance_metric="200"/>
            	<announcement level="2" distance_metric="500"/>
		<!-- TRUNK ROADS -->
            <roadprofile item_types="street_n_lanes" speed="60" route_weight="160" maxspeed="115">
            	<announcement level="0" distance_metric="100"/>
            	<announcement level="1" distance_metric="750"/>
            	<announcement level="2" distance_metric="1500"/>
		<!-- MOTORWAYS -->
            <roadprofile item_types="highway_city,highway_land" speed="90" route_weight="200" maxspeed="115">
            	<announcement level="0" distance_metric="300"/>
            	<announcement level="1" distance_metric="1000"/>
            	<announcement level="2" distance_metric="2000"/>
		<!-- SLIPROADS -->
            <roadprofile item_types="ramp" speed="40" route_weight="40" maxspeed="97">
            	<announcement level="0" distance_metric="50"/>
            	<announcement level="1" distance_metric="200"/>
            	<announcement level="2" distance_metric="500"/>
            <roadprofile item_types="roundabout" speed="5" route_weight="80"  maxspeed="97"/>
            <roadprofile item_types="ferry" speed="5" route_weight="10"/>

comment:4 Changed 5 years ago by usul

  • Milestone changed from want patch / contribution to version 0.5.1

comment:5 Changed 5 years ago by fred labrosse

  • Severity set to normal

Interesting ticket. I too have found that ETA was hopelessly optimistic (on an initially 6 hours journey, I in fact drove for more than 7 hours...). As reported in comment:3, I have speeds set for each type of road to suit my driving/vehicle.

However, these speeds are clearly ignored. I know that because I set my speed on motorways to be 100km/h, and my ETA kept increasing when the speed limit was 130km/h and stabilised when it was 110km/h, which is more or less the speed I drive at.

My view is that users should not ave to set that and this should be "learnt" from a rolling average speed.

comment:6 Changed 5 years ago by fred labrosse

  • Cc fre.labrosse@… added

comment:7 Changed 14 months ago by

  • Milestone changed from version 0.5.1 to version 0.6.0

This will be addressed later because it takes a lot of afford.

Note: See TracTickets for help on using tickets.